更新sql查询并在一个查询中获取更新的字段

时间:2013-05-15 14:48:47

标签: php mysql sql codeigniter

我正在尝试使用codeigniter查询函数更新列的值,如下所示:

    $this->db->query("UPDATE table SET val = val + 1 WHERE name = 'xxxxx');

有没有办法在同一查询函数中获取此更新的结果?我必须执行选择查询才能执行此操作,并且由于此应用程序正在管理的用户数量,这很危险。

如果更新和选择之间存在另一个查询,则结果将不正确。

谢谢!

1 个答案:

答案 0 :(得分:1)

使用交易和更新。这是zend的一个例子,它是一种类似于db访问的东西:

$db->beginTransaction();
$val = $db->select()->forUpdate()->from('table', 'val')->orderBy('val DESC')->limit(1)->query()->fetchColumn();
$db->update('table', 'val = '.($val+1), 'name = "xxx"');
$db->commit()

事务的for-update会阻止另一个查询干扰。

在此处了解有关更新的详情:http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

关于这里的codeigniter交易:http://ellislab.com/codeigniter/user-guide/database/transactions.html(感谢@Nanne)