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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-23 19:46:31625ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。