Вставка значений: подготовленный оператор или запрос с несколькими значениями? - PullRequest
3 голосов
/ 03 марта 2011

С вашей точки зрения и с точки зрения производительности, какое лучшее решение для вставки нескольких значений в таблицу?

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 Ответ

2 голосов
/ 03 марта 2011

Я предпочитаю более поздний метод. Каждый запрос к базе данных должен отправляться на сервер базы данных и получать результаты, что занимает много времени, особенно если сервер базы данных работает на другом компьютере.

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 - количество строк, отправленных в БД).

С другой стороны, вы меньше контролируете возможные отдельные ошибки, которые могут возникнуть (например, дубликаты ключей (хотя ON DUPLICATE KEY может спасти вас от некоторых проблем), неверные значения и т. Д.).

Выбор вашего метода, как всегда, будет зависеть от вашего приложения.

...