Codeigniter db-> update()VS MySQL native UPDATE受影响的行:0

时间:2013-02-06 03:00:53

标签: mysql codeigniter rows-affected

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

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

NAME =' 约翰'已经' 约翰' - 换句话说 - 没有什么是新的,没有什么可以更新的。 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

$ effects 最终等于1。 我没有遇到这个问题 - 我只是想到如果没有什么可以更新的 - 那个codeigniter的行为与MySQL的行为相同,而不是编辑不需要更新的东西,并为affected_rows返回0( )。

  • 我在某种程度上弄错了吗?
  • codeigniter是否覆盖' John '?不是吗?

1 个答案:

答案 0 :(得分:3)

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

$this->db->last_query();

同时发布您用于与MySQL交互的查询,只是为了确认正在运行完全相同的查询。

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

相关问题