drupal插入/更新数据db_merge()

一般来说,我们会对数据库已经存在的内容进行更新,对不存在的进行插入,但是有时候我们并不确定数据库里有没有这条记录。
这个时候,我们课哟使用db_merge()函数来解决这个问题,这个函数会自动为您选择:如果有则更新,如果没有则插入。
在不使用这个函数的情况下,大部分人会这样解决:

<?php
if (db_result(db_query("SELECT COUNT(*) FROM {example} WHERE id=:id", array(':id' => $id))->fetchField())) {
  // 运行一个更新
}
else {
  // 运行一个插入
}
?>

使用了这个函数我们这个操作将会变得简单和灵活。

<?php
db_merge('node', $options);
?>

db_merge接受两个参数,数据库表名,数据库连接选项。

<?php
db_merge('example')
  ->key(array('name' => $name))
  ->fields(array(
      'field1' => $value1,
      'field2' => $value2,
  ))
  ->updateFields(array(
    'field1' => $alternate1,
  ))
  ->execute();
?>

db_merge()中使用key来充当where的角色,控制查询选项。
在这个例子中,如果'name'=>$name这个记录存在则执行updateFields中的更新,否则执行fields中的插入。
updateFields和fields的数据结构是一样的。
看下面的例子:

<?php
db_merge('example')
  ->key(array('name' => $name))
  ->fields(array(
      'field1' => $value1,
      'field2' => $value2,
  ))
  ->expression('field1', 'field1 + :inc', array(':inc' => 1))
  ->execute();
?>

这个例子和上面的差不多,只不过当数据存在的时候会执行一个更新运算,而不是直接更新。
expression()涌来执行更新运算,接受三个参数,字段名,运算表达式,如果表达式里使用变量请使用代替符,第三个参数是一个数组,提供被代替符替换的变量,形式见上面的表达式。
expression()可以被多次执行。

原文地址:http://w3123.com/node/873

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值