web-dev-qa-db-ja.com

MySQL PDOクエリのbindParamでLIKEを使用する

これらのクエリの記述方法に関する複数の例を読みましたが、bindParamを使用するときに、この特定のクエリを実行するのに苦労しています

これは、aで始まるユーザー名を照合する正しい方法でしょうか?

$term = "a";
$term = "'$term%'";

$sql = "SELECT username 
        FROM `user` 
        WHERE username LIKE :term 
        LIMIT 10";      

$core = Connect::getInstance();

$stmt = $core->dbh->prepare($sql);
$stmt->bindParam(':term', $term, PDO::PARAM_STR);
$stmt->execute();
$data = $stmt->fetchAll();
18
Dan

いいえ、内側の一重引用符は必要ないので、$term = "$term%";

現在実行しているステートメントは、'a%'ではなくa%に一致しようとします

bindParamは、SQLステートメントに渡されたすべての文字列データが自動的に適切に引用符で囲まれるようにします。

26
Harald Brinkhof

$ query = "search string"があるとすると、bindValueを使用できます。

$stmt->bindValue(':term', $query.'%'); // this will do like search for "search term XXXXX"

同様に

$stmt->bindValue(':term', '%'.$query.'%');

または

$stmt->bindValue(':term', '%'.$query);
0
Dip