次のようなSQLクエリがあります。
SELECT * FROM tbl_name WHERE title Like "%:needle%"
このステートメントを使用して MySQL db を手動でクエリすると、機能します。しかし、PDO で使用し、手動でクエリしたのと同じ :needle の値で使用すると、空の結果セットが返されます。
utf8 エンコーディングは動作に影響しますか?
PDOを使用すると、これは次のように実行できます。
$stmt = $db->prepare("SELECT * FROM tbl_name WHERE title LIKE :needle");
$needle = '%somestring%';
$stmt->bindValue(':needle', $needle, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
のようにしてみてください
$sql = 'SELECT * FROM tbl_name WHERE title Like ":needle"';
$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':needle' => '%'.$somestring.'%'));
「%」は、ステートメントではなく、変数にある必要があります。変数に「%」を入れれば問題ありません。
'SELECT * FROM tbl_name WHERE title Like ":needle"'
$needle = "%$needle%";