1

PHPマニュアルには、次のように記載されています。

異なるパラメーター値で複数回発行されるステートメントに対してPDO::prepare()およびPDOStatement :: execute()を呼び出すと、ドライバーがクエリプランのクライアント側および/またはサーバー側のキャッシングをネゴシエートできるようになり、アプリケーションのパフォーマンスが最適化されます。メタ情報であり、パラメーターを手動で引用する必要がないため、SQLインジェクション攻撃を防ぐのに役立ちます。

PHP PDO :: prepare

単一の場合、1ページのクエリ-次のように言います。

$query = "SELECT id, content FROM pages WHERE id = :id LIMIT 1";

次のように準備と実行を使用しています:

$statement = $connection->prepare( $query );
$statement->execute( array( ":id" => 5 ) );

行くための最良の方法は?マニュアルから、複数回バインドされるクエリにはprepare()のみを使用する必要があると感じています。この場合、他のオプションは何ですか?(手動でquoteを呼び出してから、PDO :: query()を呼び出す可能性がありますか?)

4

1 に答える 1

1

単一のクエリに対してのみプリペアドステートメントを使用する場合、パフォーマンスに影響があるかどうかはわかりません。

すべてのクエリは解析、分析、最適化されます。PDO:query()これは(およびmysql_*、、、mysqli_*…)にも当てはまります。プリペアドステートメント-簡単に言えば-解析、分析、最適化、クエリプランニングをクエリの実行とは別にします。私の(おそらくナイーブな)仮定は、単一のクエリに対してオーバーヘッドで準備された統計がもたらすのは、準備された結果のキャッシュだけであるということです。

ただし、クエリを実行するために1つのAPIを使用すると、わずかなパフォーマンスの低下を上回るはずです。PDO::query()単一のクエリの代わりに使用する場合はPDO::prepare()、パラメータのバインドと自動エスケープprepare()オファーをすぐに利用できません。これにより、データを忘れた場合に、ワームの新しい缶が開かれる可能性がありPDO::quote()ます。

PDO::query()私は、合理的な方法で準備できないものにのみ使用します(たとえば、「静的」クエリや、 et allSELECT foo FROM bar ORDER BY bla DESC LIMIT 1を多用するクエリなど)。IN()

于 2012-07-08T11:23:26.747 に答える