Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PDO e vinculação de vários conjuntos de valores durante a inserção - recentemente


Em teoria, pode parecer que uma única instrução é mais eficiente porque você evita fazer várias chamadas para o servidor MySQL, mas a realidade é que isso é uma micro-otimização e você está complicando demais seu código para quase nenhum benefício.

O legal das declarações preparadas é que elas são preparadas uma vez e podem ser executadas várias vezes. Isso já evita que você analise a instrução SQL várias vezes. Simplesmente prepare uma instrução fora de um loop e execute-a dentro de um loop.
$names = [['Joe', 'Smith'], ['Fred', 'Sampson'], ['Lisa', 'Pearce']];
$stmt = $pdo->prepare('INSERT INTO table (firstName, lastName) VALUES(?,?)');
foreach ($names as $name) {
    $stmt->execute($name);
}

Se você envolver tudo em uma transação como o seu senso comum sugeriu nos comentários, não haverá diferença perceptível no desempenho em comparação com uma grande declaração.
$names = [['Joe', 'Smith'], ['Fred', 'Sampson'], ['Lisa', 'Pearce']];
$stmt = $pdo->prepare('INSERT INTO people (firstName, lastName) VALUES(?,?)');
$pdo->beginTransaction();
foreach ($names as $name) {
    $stmt->execute($name);
}
$pdo->commit();