配列パラメータを渡し、PDO で LIMIT 句を使用する方法

Barbara Streisand
リリース: 2024-10-23 19:37:01
オリジナル
930 人が閲覧しました

How to Pass Array Parameters and Use LIMIT Clause with PDO

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

データベース クエリを操作する場合、パラメータの配列を PDO に渡すと有益な場合があります。 LIMIT 句を使用しているときの PDO ステートメント。ただし、bindParam メソッドを使用して個々のパラメータを設定する場合、これは困難になる可能性があります。

ジレンマ

LIMIT 句では特定の数値をバインドする必要があるため、この課題が発生します。一方、execute メソッドは名前付きパラメータの配列を期待します。この非互換性のため、両方のアプローチを同時に使用することはできません。

問題の解決

解決策は、PDO::ATTR_EMULATE_PREPARES のデフォルト設定を無効にすることです。有効にすると、PDO は内部で動的 SQL を生成し、値を引用符で囲み、基本的に準備されたステートメントをエミュレートします。ただし、このデフォルトの動作は、名前付きパラメータの受け渡しを妨げます。

エミュレートされた Prepares の無効化

setAttribute メソッドを使用して PDO::ATTR_EMULATE_PREPARES を false に設定すると、デフォルトの動作が無効になります。 。これにより、PDO は実際のプリペアド ステートメントを使用できるようになり、LIMIT 句を利用しながら名前付きパラメータのバインドが可能になります。

使用例

<code class="php">$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%') LIMIT :limit1, :limit2";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(':id' => $id, ':limit1' => $limit1, ':limit2' => $limit2)); // Works!</code>
ログイン後にコピー

パフォーマンスに関する考慮事項

エミュレートされた準備は、パフォーマンスを向上させるために MySQL でデフォルトで使用されます。エミュレートされた準備を無効にすると、パフォーマンスがわずかに低下する可能性がありますが、パラメータ バインディングの柔軟性が向上します。

追加リソース

このトピックの詳細については、次のリソースを参照してください。

  • [PDO MySQL: PDO::ATTR_EMULATE_PREPARES を使用しますか?](https://stackoverflow.com/questions/3273325/pdo-mysql-use-pdo-attr-emulate-prepares-or -違う)

以上が配列パラメータを渡し、PDO で LIMIT 句を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!