3

单独使用 MySQL - 如果我对这样的表进行基本更新:

UPDATE `SOMETABLE` SET `NAME` = 'John' WHERE `ID` = 1;

NAME= ' John '的值已经是 ' John ' - 换句话说 - 没有什么是新的,没有什么可更新的。MySQL 返回“受影响的行:0(查询耗时 0.0007 秒)

如果我进行相同的调用——现在使用 CodeIgniter——然后像这样检索受影响的行:

$data = array(
               'NAME' => 'John'
            );

$this->db->where('ID', 1);
$this->db->update('SOMETABLE', $data); 
$affect = $this->db->affected_rows();

echo $affect; // $affect echos 1

$affect最终等于 1。我对此没有任何问题——我只是希望如果没有什么要更新的——codeigniter 的行为方式与 MySQL 相同,并且不会编辑不需要更新的内容,并且为受影响的行()返回 0。

  • 我有什么地方弄错了吗?
  • codeigniter 是否覆盖了“ John ”?或不?
4

1 回答 1

2

尝试使用以下代码获取 CodeIgniter 正在运行的查询:

$this->db->last_query();

还要发布您用于与 MySQL 交互的查询,以确认正在运行完全相同的查询。

CodeIgniter 确实有一个针对 MySQL 的 hack,它可以调整受影响行的报告,但我的印象是它只适用于 DELETE 查询。如果您查看system/database/drivers/mysql/mysql_driver.phpor system/database/drivers/mysqli/mysqli_driver.php(无论您使用哪个驱动程序并查看变量var $delete_hack = TRUE;。调整可能会影响您的结果,是否值得一试?

于 2013-02-06T03:26:31.570 回答