ホームページ  >  記事  >  データベース  >  配列パラメータを渡し、PDO で LIMIT 句を使用する方法

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

Barbara Streisand
Barbara Streisandオリジナル
2024-10-23 19:37:01931ブラウズ

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

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