插入值:预处理语句还是多个值查询?

时间:2011-03-03 13:29:42

标签: php sql prepared-statement

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

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注入。

一个有争议的答案将不胜感激:)

由于

1 个答案:

答案 0 :(得分:2)

我更喜欢后面的方法。每个数据库请求都必须发送到数据库服务器并接收结果 - 这需要时间,尤其是在数据库服务器在不同的计算机上运行时。

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 是发送到数据库的行数)。< / p>

另一方面,您对解决可能出现的个别错误(如重复键(尽管ON DUPLICATE KEY可以省去一些麻烦),错误值等)的控制较少。

您的方法的选择将一如既往地取决于您的应用程序。