ホームページ > バックエンド開発 > PHPチュートリアル > PHP で MySQL プリペアドステートメントで LIMIT を適切に使用する方法は?

PHP で MySQL プリペアドステートメントで LIMIT を適切に使用する方法は?

Linda Hamilton
リリース: 2024-12-18 01:01:09
オリジナル
552 人が閲覧しました

How to Properly Use LIMIT in MySQL Prepared Statements with PHP?

プリペアド ステートメントを使用した 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 サイトの他の関連記事を参照してください。

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