プリペアド ステートメントを使用した MySQL の LIMIT キーワード
MySQL のプリペアド ステートメントで LIMIT キーワードを使用しようとすると、予期しない動作が発生する可能性があります。文字列をパラメータとして使用する場合の解析エラーなど。この問題は、PHP の PDO が実行時にデフォルトですべてのパラメータを文字列として扱うために発生します。
提供されたクエリ:
SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT ?, ?
LIMIT パラメータの値が文字列として挿入されているため、無効な SQL 構文:
LIMIT '0', '10'
この問題を解決するには、いくつかの方法があります。オプション:
型でパラメータをバインド
データ型を指定して LIMIT パラメータを個別にバインドします:
$comments->bindParam(2, $min, PDO::PARAM_INT); $comments->bindParam(3, $min, PDO::PARAM_INT);
パラメータを外部に渡す準備されたステートメント
を避けるLIMIT 値のパラメータを使用し、それらをクエリに直接埋め込みます。
$query = sprintf('SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT %d, %d', $min, $max);
エミュレートされた Prepares を無効にする
一部のドライバは準備されたステートメントをエミュレートし、数値引数を自動的に引用する場合があります。この動作を無効にします:
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
これらのアプローチのいずれかを実装すると、MySQL 内のプリペアド ステートメントで LIMIT キーワードを正しく使用できます。
以上がPHP で MySQL プリペアドステートメントで LIMIT を適切に使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。