ドキュメントからすぐに:
異なるパラメーター値で複数回発行されるステートメントに対して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