■事例1
$sql="SELECT * FROM `test` LIMIT ?,?"; $stmt = $dbh->prepare($sql); $stmt->execute(array($a, $b));
上述のように、LIMIT節にプリペアードステートメント(Prepared Statement)で値を代入しようとすると、数値がシングルクォーテーションで括られてしまい、エラーが発生してしまう。
■対策
LIMIT節にはプレイスホルダーを使わないようにする。これはPDOのバージョンによって発生したりしなかったりするので注意が必要。
■LIMIT節
基本的に数値を指定する事になると思うので、(int)を使って整数型へ変換し、数値の範囲でフィルタリングすれば、LIMIT節にプリペアードステートメントを使わなくても、SQLインジェクションは防げるはずである。