2013-08-30 13 views
29

私はmysqliでLIKEでクエリを作成し、すべての結果を得ることができますか?php mysqli prepared statement LIKE

これは私のコードですが、それは仕事をdosn't:

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 
$stmt->bind_result($id,$username); 
$stmt->fetch(); 

このコード動作するようには思えません。私はそれをたくさん探しました。 また、1行以上を返します。 それで、1行以上を返しても、すべての結果を取得するにはどうすればよいですか?私はあなたが私はあるマニュアルherehereから直接答えを得た実現を願ってい

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 

$result = $stmt->get_result(); 
while ($row = $result->fetch_array(MYSQLI_NUM)) { 
    foreach ($row as $r) { 
    print "$r "; 
    } 
    print "\n"; 
} 

:ここ

+1

"does not work"を定義してください - PHPエラー? MySQLのエラー?エラーはありませんが、結果は0ですか? –

+0

すべての結果をループしたい。これどうやってするの? 私は言うときは動作しません。何も返しません... – user2493164

+0

このコードには戻り演算子はありません。 **何が返されるのでしょうか?** –

答えて

48

は、あなたが適切に結果

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 
$stmt->bind_result($id,$username); 

while ($stmt->fetch()) { 
    echo "Id: {$id}, Username: {$username}"; 
} 

またはあなたも行うことができますを取得する方法ですあなたは最初に行ったはずです。あなたは$param値を編集する必要はありませんが、少し長いクエリのために作るん意味

$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') "); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 

:あなたもこれMySQLのCONCAT機能を使用することができる上に与えられた答えに代わるものとして

+2

OPを守るために、どちらのマニュアルページもLIKE比較関数 "function"について何も言及していません。 –

21

+0

こんにちはconcatはSQLインジェクションから安全ですか?私はそれが引用符を持っているので頼んでいる。ありがとう –

+0

@mikevorisisはい、それはまだクエリがパラメータ化されているので安全です(* '?' *を使って)。引用符はMySQLが3つの文字列を連結しているためです。 – Martin

+0

okありがとう@Martin –

関連する問題