【问题标题】:$this->db->affected_rows() returns -1 after query in codeigniter$this->db->affected_rows() 在 codeigniter 中查询后返回 -1
【发布时间】:2012-05-14 19:32:08
【问题描述】:

我在 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。

有什么问题?我正在使用带有 mysqli 驱动程序的 codeigniter 2.1.0

我尝试在 phpmyadmin 中运行它,它根据数据为我提供了正确的 0 或 1 行。但是当我通过 codeigniter 运行它时,即使要更新的值已更改或保持不变,我也会得到 -1

查询总是在codeigniter中为真

是不是因为我开启了codeigniter mysqli驱动

【问题讨论】:

  • 您可以尝试直接在数据库上运行查询吗?只要确保预期的查询实际上是直接运行的,如果是,我们可以继续调试:)
  • 我尝试在 phpmyadmin 中运行它,它根据数据为我提供了正确的 0 或 1 行。但是当我通过 codeigniter 运行它时,我得到 -1

标签: mysql codeigniter codeigniter-2


【解决方案1】:

在执行“写入”类型查询时显示受影响的行数 (插入、更新等)。

参考: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();

【讨论】:

  • 查询总是在codeigniter中为真。我尝试在 phpmyadmin 中运行它,它根据数据为我提供了正确的 0 或 1 行。但是当我通过 codeigniter 运行它时,即使要更新的值已更改或保持不变,我也会得到 -1 是因为我已打开 codeigniter mysqli 驱动程序
【解决方案2】:

这完全取决于您,但您也可以将此查询转换为 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

【讨论】:

  • 我尝试在 phpmyadmin 中运行它,它根据数据为我提供了正确的 0 或 1 行。但是当我通过 codeigniter 运行它时,即使要更新的值有,我也会得到 -1更改或保持不变查询始终在 codeigniter 中为真,因此现在不需要活动记录
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 2012-07-23
  • 2013-04-03
  • 2017-04-10
  • 2016-12-29
  • 2015-12-15
相关资源
最近更新 更多