MySQL のプリペアド ステートメントでの LIMIT キーワードの動作
MySQL の LIMIT キーワードは、SELECT によって返される行数を制限するために使用されます。声明。オフセットと制限の 2 つの整数引数を取ります。
次の例では、LIMIT 句を使用して、コメント テーブルから最初の 10 行を日付列の降順で選択します。
SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT ?, ?
PDO プリペアド ステートメントを使用してこのクエリを実行するには、3 つのクエリ パラメーターを適切なデータにバインドします。 type:
$query = $db->prepare($sql); $query->bindParam(1, $post, PDO::PARAM_STR); $query->bindParam(2, $min, PDO::PARAM_INT); $query->bindParam(3, $max, PDO::PARAM_INT); $query->execute();
ただし、エミュレートされた準備を有効にして (MySQL PDO ドライバーのデフォルト設定)、このクエリを実行しようとすると、エラーが発生します。これは、MySQL ドライバーが 2 番目と 3 番目のクエリ パラメーターを自動的に文字列にキャストするため、LIMIT 句が失敗するためです。
この問題を解決するには、エミュレートされた準備を無効にするか、代わりに位置プレースホルダーを使用します。クエリ内の名前付きプレースホルダー。
エミュレートの無効化準備:
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
位置プレースホルダーの使用:
SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT ? OFFSET ?
$query = $db->prepare($sql); $query->execute([$post, $min, $max]);
以上がMySQL の LIMIT キーワードはプリペアド ステートメントとパラメータ バインディングでどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。