0

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

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

有什么方法可以在同一个查询函数中获取此更新的结果?我必须做一个选择查询才能做到这一点,这很危险,因为这个应用程序正在管理大量的用户。

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

谢谢!

4

1 回答 1

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)

于 2013-05-15T14:53:31.303 回答