2011-03-03 88 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_to_prepare_query + time_sending_query + time_to_executing_query + time_receiving_results + time_processing_results

當使用第二種方法中,我沒有計數time_sending_query和time_receiving_results Ñ倍(Ñ被行數發送到D b)。另一方面,對於解決可能出現的單個錯誤(例如重複鍵(儘管ON DUPLICATE KEY可以爲您節省一些麻煩),錯誤的值等),您擁有較少的控制權。

您的方法的選擇將一如既往取決於您的應用程序。

相關問題