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からの仕様ということではなく、いままではこの書き方でもエラーにならなかったというだけのことらしい。