我正在尝试使用 codeigniter 查询函数更新列的值,如下所示:
$this->db->query("UPDATE table SET val = val + 1 WHERE name = 'xxxxx');
有什么方法可以在同一个查询函数中获取此更新的结果?我必须做一个选择查询才能做到这一点,这很危险,因为这个应用程序正在管理大量的用户。
如果在更新和选择之间有另一个查询,则结果将不正确。
谢谢!
我正在尝试使用 codeigniter 查询函数更新列的值,如下所示:
$this->db->query("UPDATE table SET val = val + 1 WHERE name = 'xxxxx');
有什么方法可以在同一个查询函数中获取此更新的结果?我必须做一个选择查询才能做到这一点,这很危险,因为这个应用程序正在管理大量的用户。
如果在更新和选择之间有另一个查询,则结果将不正确。
谢谢!
使用事务和更新。这是一个来自 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)