我在codeigniter中有这样的查询
$update= $this->db->query("update aas set aa = 'aa' where no=" . $this->db->escape($No) . "");
当我跑步时
echo $this->db->affected_rows() or echo $this->db->affected_rows($update)
它返回-1
当更新存在的任何行时,我得到-1 即使我没有要更新的行,它仍然显示-1。
问题是什么?我使用codeigniter 2.1.0与mysqli驱动程序
我已经尝试在phpmyadmin中运行它并且它根据数据给我正确的0或1行。但是当我通过codeigniter运行它时,即使当要更新的值已更改或保持相同时,我得到-1 / p>
查询在codeigniter
中始终为true是因为我打开了codeigniter mysqli驱动程序
答案 0 :(得分:3)
执行“写入”类型查询时显示受影响的行数 (插入,更新等)。
参考:Here。
sql
语句中的错误(引号)(因此未执行)
$update= $this->db->query("update aas set aa = 'aa' where no=" . $this->db->escape($No) . "");
应该是
$update = $this->db->query("update aas set aa = 'aa' where no = '{$this->db->escape($No) }'");
echo $this->db->affected_rows();
答案 1 :(得分:0)
这完全取决于您,但您也可以将此查询转换为CodeIgniter的Active Record Class。它不仅可以自动逃避一切,更容易用于简单查询,并避免SQL语句中引号错误的潜在问题。
因此,对于Active Record,它看起来像这样:
$data = array(
'aa' => 'aa'
);
$this->db->where('no', $No)->update('aas', $data);
echo $this->db->affected_rows(); // this should return 1 now