2

PDO の使用方法を学ぼうとしていますが、何かを理解するのに助けが必要です。

mysql_*PDO を使用する最大の利点の 1 つは、同様のクエリを何度も作成する場合よりもはるかに効率的であるということです。バインドされたパラメーターが毎回変わることを除いて、まったく同じクエリを作成する必要があります (ただし、クエリの構造は同じです)。だから、ここに私の質問があります:

一度呼び出しPDO::prepare()てからループ呼び出し内で呼び出す必要execute()がありますか (パラメーター配列を渡す)、またはPDO::preprare()ループが実行されるたびに呼び出す必要がありますか?

ありがとう!

4

1 に答える 1

3

ドキュメントからすぐに:

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

したがって、prepareを1回だけ呼び出し、ループ内でexecuteを呼び出します。

ドキュメントからの例:

<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
?>

http://www.php.net/manual/de/pdo.prepare.php

于 2012-07-14T14:48:03.893 に答える