Tôi sẽ sử dụng mã sau đây.
foreach ($user_emails as $value) {
$query = db_insert('banned_users');
$query->fields(array('email' => $value))->execute();
}
Ngoài ra, bạn có thể sử dụng mã sau đây.
$query = db_insert('banned_users')->fields(array('email'));
foreach ($user_emails as $value) {
$query->values(array('email' => $value));
}
$query->execute();
Với MySQL, truy vấn sử dụng cú pháp đa giá trị.
Với các cơ sở dữ liệu khác, các truy vấn được thực hiện sẽ là một cho mỗi cuộc gọi đến $query->values()
, được gói trong một giao dịch. Điều này có nghĩa là các truy vấn sẽ được khôi phục khi một trong số chúng thất bại. Trong thực tế, mã được thực thi từ insertQuery :: exec () là mã sau đây.
// 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;
}
Nói tóm lại, tôi sẽ sử dụng mã bạn đang sử dụng nếu các giá trị được chèn độc lập với nhau; Tôi sẽ sử dụng mã tôi đã hiển thị khi các giá trị phụ thuộc lẫn nhau.
Trong trường hợp của bạn, các email là độc lập với nhau. Nếu bạn sẽ sử dụng đoạn mã thứ hai mà tôi đã hiển thị, bảng cơ sở dữ liệu sẽ chứa tất cả các giá trị, khi truy vấn phụ không bị lỗi hoặc không có gì khi một truy vấn phụ không thành công.
Bạn cũng có thể sử dụng drupal_write_record()
, mặc dù tôi rất thích các đoạn khác.
foreach ($user_emails as $value) {
drupal_write_record('banned_users', array('email' => $value));
}
Mặc dù vậy, tôi không thấy bất kỳ chuyên gia nào trong việc sử dụng đoạn trích này.
Tài liệu tham khảo
$values
và chỉ gọi 1execute()
. drupal.org/node/310079 Ví dụ này được sử dụng trong việc tạo khối mặc định của cấu hình tiêu chuẩn.