Vorrei usare il seguente codice.
foreach ($user_emails as $value) {
$query = db_insert('banned_users');
$query->fields(array('email' => $value))->execute();
}
In alternativa, è possibile utilizzare il seguente codice.
$query = db_insert('banned_users')->fields(array('email'));
foreach ($user_emails as $value) {
$query->values(array('email' => $value));
}
$query->execute();
Con MySQL, la query utilizza la sintassi multi-valore.
Con altri database, le query eseguite saranno una per ogni chiamata a $query->values()
, racchiuse in una transazione. Ciò significa che le query verranno ripristinate quando una di esse fallisce. In effetti, il codice eseguito da InsertQuery :: execute () è il seguente.
// Each insert happens in its own query in the degenerate case. However,
// we wrap it in a transaction so that it is atomic where possible. On many
// databases, such as SQLite, this is also a notable performance boost.
$transaction = $this->connection->startTransaction();
try {
$sql = (string) $this;
foreach ($this->insertValues as $insert_values) {
$last_insert_id = $this->connection->query($sql, $insert_values, $this->queryOptions);
}
}
catch (Exception $e) {
// One of the INSERTs failed, rollback the whole batch.
$transaction->rollback();
// Rethrow the exception for the calling code.
throw $e;
}
In breve, vorrei usare il codice che stai usando se i valori inseriti sono indipendenti l'uno dall'altro; Vorrei usare il codice che ho mostrato quando i valori dipendono l'uno dall'altro.
Nel tuo caso, le e-mail sono indipendenti l'una dall'altra. Se utilizzi il secondo frammento mostrato, la tabella del database conterrà tutti i valori, quando la query secondaria non fallisce o nessuna quando una query secondaria non riesce.
Potresti anche usare drupal_write_record()
, anche se preferisco di gran lunga gli altri frammenti.
foreach ($user_emails as $value) {
drupal_write_record('banned_users', array('email' => $value));
}
Tuttavia, non vedo alcun professionista nell'usare questo frammento.
Riferimento
$values
e chiamare solo 1execute()
. drupal.org/node/310079 Viene utilizzato ad esempio nella creazione di blocchi predefiniti di profili standard.