ホームページ >データベース >mysql チュートリアル >配列パラメータを渡し、PDO で LIMIT 句を使用する方法
配列パラメータの受け渡しと 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 で LIMIT 句を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。