J'utiliserais le code suivant.
foreach ($user_emails as $value) {
$query = db_insert('banned_users');
$query->fields(array('email' => $value))->execute();
}
Vous pouvez également utiliser le code suivant.
$query = db_insert('banned_users')->fields(array('email'));
foreach ($user_emails as $value) {
$query->values(array('email' => $value));
}
$query->execute();
Avec MySQL, la requête utilise la syntaxe à valeurs multiples.
Avec d'autres bases de données, les requêtes exécutées seront une pour chaque appel à $query->values()
, encapsulées dans une transaction. Cela signifie que les requêtes seront annulées en cas d'échec de l'une d'entre elles. En fait, le code exécuté à partir de InsertQuery :: execute () est le suivant.
// 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;
}
En bref, j'utiliserais le code que vous utilisez si les valeurs insérées sont indépendantes les unes des autres; J'utiliserais le code que j'ai montré lorsque les valeurs dépendent les unes des autres.
Dans votre cas, les e-mails sont indépendants les uns des autres. Si vous utilisiez le deuxième extrait que j'ai montré, la table de base de données contiendra toutes les valeurs, lorsque la sous-requête n'échouera pas, ou aucune lorsqu'une seule sous-requête échouera.
Vous pouvez également utiliser drupal_write_record()
, même si je préfère de loin les autres extraits.
foreach ($user_emails as $value) {
drupal_write_record('banned_users', array('email' => $value));
}
Cependant, je ne vois aucun pro dans l'utilisation de cet extrait.
Référence
$values
et appelez seulement 1execute()
. drupal.org/node/310079 Ceci est utilisé par exemple dans la création de blocs par défaut des profils standard.