在您看来并从性能的角度来看,在表中插入多个值的最佳解决方案是什么?
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注入。
一个有争议的答案将不胜感激:)
谢谢
最佳答案
我喜欢后面的方法。每个数据库请求都必须发送到数据库服务器并接收结果-这需要时间,尤其是如果数据库服务器在另一台计算机上运行时。
time_to_prepare_query + time_sending_query + time_to_executing_query + time_receiving_results + time_processing_results
当使用第二种方法时,我不必计数time_sending_query和time_receiving_results n次(n是发送到db的行数)。
另一方面,对于解决可能出现的单个错误(例如重复的键(尽管ON DUPLICATE KEY
可以为您节省一些麻烦),错误的值等),您的控制较少。
方法的选择将像往常一样取决于您的应用程序。
关于php - 插入值:准备语句还是多值查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5181342/