ホームページ > データベース > mysql チュートリアル > PDO で LIMIT 句を使用して配列パラメータを渡すときのエラーを解決するにはどうすればよいですか?

PDO で LIMIT 句を使用して配列パラメータを渡すときのエラーを解決するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-23 19:46:31
オリジナル
708 人が閲覧しました

How to Resolve Error When Passing Array Parameters with LIMIT Clause in PDO?

LIMIT 句を使用した PDO パラメータの配列の受け渡し

概要:

PDO を使用する場合の場合、パラメーターの配列を渡しながら LIMIT 句を同時に使用するのは難しい場合があります。この記事では、この問題の解決策を提供します。

問題ステートメント:

次の SQL クエリがあるとします:

SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%')
LIMIT :limit1, :limit2
ログイン後にコピー

これを実行したいと考えています。以下に示すように、パラメータの配列を使用してクエリを実行します。

$stmt->execute($array);
ログイン後にコピー

ただし、LIMIT パラメータ (:limit1 および :limit2) にbindParam() メソッドを使用すると、エラーが発生します。

解決策:

解決策は、PDO::ATTR_EMULATE_PREPARES のデフォルトの PDO 設定を無効にすることです。この設定は基本的に、プリペアド ステートメントをネイティブに使用するのではなく、プリペアド ステートメントをエミュレートするように PDO に指示します。

この設定を無効にするには:

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
ログイン後にコピー

この設定を無効にすると、クエリを準備して実行できます。 LIMIT 値を含むパラメータの配列:

$stmt = $pdo->prepare($sql);
$stmt->execute(array(5)); //works!
ログイン後にコピー

影響:

PDO::ATTR_EMULATE_PREPARES を無効にすると、準備されたエミュレーションのオーバーヘッドが削除されるため、パフォーマンスが向上します。発言。ただし、パフォーマンス上の理由により、この設定はデフォルトで有効になっていることに注意してください。

追加リソース:

  • [PDO MySQL: PDO を使用:: ATTR_EMULATE_PREPARES かどうか?](https://pdosql.org/pdo-mysql-use-pdo-attr-emulate-prepares-or-not/)

以上がPDO で LIMIT 句を使用して配列パラメータを渡すときのエラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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