LIMIT 句を指定したbindValue の使用: SQL 構文エラーの解決策
LIMIT 句を指定してbindValue メソッドを使用しようとすると、 PDO が変数値に一重引用符を追加するため、ユーザーは SQL 構文エラーに遭遇します。このエラーは、2008 年に報告された既知のバグ (Bugs.php.net/bug.php?id=44639) に遡ることができます。
この問題に対処し、データの整合性を確保するには、変数値を整数にキャストします。バインドする前に問題が解決されます。変更されたコード スニペットは次のようになります。
$fetchPictures = $PDO->prepare("SELECT * FROM pictures WHERE album = :albumId ORDER BY id ASC LIMIT :skip, :max"); $fetchPictures->bindValue(':albumId', $_GET['albumid'], PDO::PARAM_INT); if(isset($_GET['skip'])) { $fetchPictures->bindValue(':skip', (int) trim($_GET['skip']), PDO::PARAM_INT); } else { $fetchPictures->bindValue(':skip', 0, PDO::PARAM_INT); } $fetchPictures->bindValue(':max', $max, PDO::PARAM_INT); $fetchPictures->execute() or die(print_r($fetchPictures->errorInfo())); $pictures = $fetchPictures->fetchAll(PDO::FETCH_ASSOC);
PDO パラメータとしてバインドする前に、trim($_GET['skip']) などの変数を整数にキャストすると、一重引用符がが削除され、SQL 構文エラーが防止されます。この手法により、変数値が LIMIT 句の意図どおりに整数として扱われることが保証されます。
この解決策は、特に LIMIT 句で bindingValue メソッドを使用する場合に適用されることに注意してください。他のコンテキストでは、変数の型と引用に関する PDO の動作が異なる場合があります。最新情報については、常に PDO ドキュメントまたは公式ソースを参照してください。
以上がPDO のbindValue を LIMIT で使用するときに SQL 構文エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。