PHP8.1でSQLSTATE[HY093]: Invalid parameter numberエラー
PHP7.4からPHP8.1に上げた際、それまで問題なく動いていたPHPプログラムでSQLSTATE[HY093]: Invalid parameter numberエラーが出た。
色々調べると、LIKEを使用したあいまい検索の書き方が間違っていた。
($search
の代入部分は今回のエラーに関係ないので割愛)
変更前$sql = "SELECT * FROM table WHERE column LIKE '%$search%'";$result = $dbh->prepare($sql);$result->bindValue(1, $id, PDO::PARAM_STR);$result->execute();
変更後$sql = "SELECT * FROM table WHERE column LIKE ?";$result = $dbh->prepare($sql);$result->bindValue(1, '%' .$search. '%', PDO::PARAM_STR);$result->execute();
いままで'%$search%'
を$sql
に入れていたけど、そうではなく、bindValueの第二引数に入れる。
PHP8からの仕様ということではなく、いままではこの書き方でもエラーにならなかったというだけのことらしい。