单独使用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( )。
答案 0 :(得分:3)
尝试使用以下代码获取CodeIgniter正在运行的查询:
$this->db->last_query();
同时发布您用于与MySQL交互的查询,只是为了确认正在运行完全相同的查询。
CodeIgniter确实有一个针对MySQL的黑客攻击,可以调整受影响行的报告,但我认为这只是针对DELETE查询的印象。如果您查看system/database/drivers/mysql/mysql_driver.php
或system/database/drivers/mysqli/mysqli_driver.php
(无论您使用哪个驱动程序并查看变量var $delete_hack = TRUE;
。调整可能会影响您的结果,可能值得一试吗?