つい忘れて何度も悩むんですよね。プリペアドステートメントでLIKEするときの注意点。
PHPでプリペアードステートメントを作るとき、検索ワードをそのままクエリに入れるとうまくいきません。
$word = "a"
$stmt->dbh.prepare("SELECT * FROM fruits WHERE name LIKE '%?%'"); /* これはダメ */
$stmt.execute([$word]);
?に展開されるときに、値をシングルクオートで囲むためのようです。
あらかじめワイルドカードとくっつけておいてから、クエリに渡します。
$word = "%a%" /* 検索文字列に、ワイルドカードを含める */
$stmt->dbh.prepare("SELECT * FROM fruits WHERE name LIKE ?");
$stmt.execute([$word]);
以上です。あなたのお役に立てればうれしいです。