Я бы использовал следующий код.
foreach ($user_emails as $value) {
$query = db_insert('banned_users');
$query->fields(array('email' => $value))->execute();
}
В качестве альтернативы вы можете использовать следующий код.
$query = db_insert('banned_users')->fields(array('email'));
foreach ($user_emails as $value) {
$query->values(array('email' => $value));
}
$query->execute();
В MySQL запрос использует многозначный синтаксис.
В других базах данных выполненные запросы будут по одному на каждый вызов $query->values()
, заключенные в транзакцию. Это означает, что запросы будут откатываться при сбое одного из них. Фактически, код, выполняемый из InsertQuery :: execute (), является следующим.
// 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;
}
Короче говоря, я бы использовал код, который вы используете, если вставленные значения не зависят друг от друга; Я бы использовал код, который я показал, когда значения зависят друг от друга.
В вашем случае электронные письма независимы друг от друга. Если бы вы использовали второй фрагмент, который я показал, таблица базы данных будет содержать все значения, когда подзапрос не завершится неудачей, или ни одного, если один подзапрос завершится неудачно.
Вы также можете использовать drupal_write_record()
, хотя я предпочитаю другие фрагменты.
foreach ($user_emails as $value) {
drupal_write_record('banned_users', array('email' => $value));
}
Я не вижу ни одного профессионала в использовании этого фрагмента.
Ссылка
$values
и только вызовите 1execute()
. drupal.org/node/310079 Это используется, например, при создании блоков стандартных профилей по умолчанию.