$ this-> db-> affected_rows()在codeigniter中查询后返回-1

时间:2012-05-05 14:11:34

标签: mysql codeigniter mysqli codeigniter-2

我在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驱动程序

2 个答案:

答案 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