在您看来并从性能的角度来看,在表中插入多个值的最佳解决方案是什么?

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/

10-11 02:59