You are here

44 多值插入形式

admin 的头像
Submitted by admin on 星期二, 2015-06-09 03:09

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

    插入查询对象上还可以使用多值集合。也就是说,values()可被调用多次,从而将多个插入语句排在一起调用。这种形式的具体执行情况,则取决于数据库自身的能力。对于大多数的数据库,多值插入语句都会放在一个事务中一起执行,这样能够保证更好的数据一致性和执行效率。对于MySQL,它将会使用MySQL的多值插入语法。

 

<?php
$values = array(
  array(
    'title' => 'Example',
    'uid' => 1,
    'created' => REQUEST_TIME,
  ),
  array(
    'title' => 'Example 2',
    'uid' => 1,
    'created' => REQUEST_TIME,
  ),
  array(
    'title' => 'Example 3',
    'uid' => 2,
    'created' => REQUEST_TIME,
  ),
);
$query db_insert('node')->fields(array('title''uid''created'));
foreach ($values as $record) {
  $query->values($record);
}
$query->execute();
?>

    在上面的例子中,我们把三个插入查询放在一个单元中执行,对于不同的数据库驱动,将会为其使用最有效的方法。注意,在这里我们把查询对象保存在了一个变量中,这样我们就可以对$values进行循环并重复的调用values()方法了。

    在退化形式下,上面的例子等价于执行下面3条查询:

INSERT INTO {node} (title, uid, created) VALUES ('Example', 1, 1221717405);
INSERT INTO {node} (title, uid, created) VALUES ('Example2', 1, 1221717405);
INSERT INTO {node} (title, uid, created) VALUES ('Example3', 2, 1221717405);

    注意,对于一个多值插入查询,execute()的返回值未被定义,因此不要调用它的返回值,数据库驱动的不同,也会对返回值产生影响。


Drupal版本: