ホームページ > データベース > mysql チュートリアル > MySQL の LIMIT キーワードはプリペアド ステートメントとパラメータ バインディングでどのように機能しますか?

MySQL の LIMIT キーワードはプリペアド ステートメントとパラメータ バインディングでどのように機能しますか?

Linda Hamilton
リリース: 2024-12-06 18:51:13
オリジナル
535 人が閲覧しました

How Does MySQL's LIMIT Keyword Work with Prepared Statements and Parameter Binding?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート