2011-03-03 18 views
3

あなたの見解やパフォーマンスの観点から、テーブルに複数の値を挿入する最適なソリューションは何ですか?値の挿入:準備された文または複数の値のクエリ?

1 - プリペアドステートメントで:

$usersId = Users::getAllId($this->sql); 
$prep = $this->sql->prepare('INSERT INTO notification_actualites (idUser,idNews) VALUES(:idU,:idN)'); 
foreach($usersId as $idU) 
{ 
    $prep->execute(array(
     ':idU' => $idU, 
     ':idN' => $idN 
    )); 
} 

2 - または複数の値をクエリで:

$usersId = Users::getAllId(); 
$values=''; 
foreach($usersId as $id) 
{ 
    $values.='(\''.$id.'\','.$idActu.'),'; 
} 
$values = substr($values,0,strlen($values)-1); 
$this->sql->query('INSERT INTO notification_actualites VALUES'.$values); 

セキュリティ面では、両方の場合には、ここでの問題ではないが、コードはSQLインジェクションを防止するようになっています。

よく主張答えをいただければ幸いです:)

おかげ

答えて

2

を、私は後者の方法を好みます。すべてのデータベース要求をデータベースサーバに送信して結果を受け取る必要があります。特に、データベースサーバが別のマシン上で実行されている場合は時間がかかります。

第二の方法を使用する場合、私はtime_sending_queryとtime_receiving_results N倍(Nをカウントする必要はありませんが、行数に送信される

time_to_prepare_query + time_sending_query + time_to_executing_query + time_receiving_results + time_processing_results

db)。

一方、キーの重複(問題が発生する可能性がありますが、ON DUPLICATE KEYでも問題ありません)など、発生する可能性のある個々のエラーを解決することはできません。

あなたのメソッドの選択は、常にあなたのアプリケーションに依存します。

関連する問題