当Code Igniter中没有更新时,如何测试我的MySQL更新查询是否成功?

时间:2013-12-10 08:49:09

标签: php mysql sql codeigniter

我知道这是一个经常被问到的问题,但让我解释一下为什么我需要再次提出这个问题。

大多数答案建议使用

$this->db->affected_rows()

这在我的情况下不起作用,因为我可能遇到更新数据与数据库中的数据相同的情况,因此即使更新成功,它也会返回0。

我知道我可以写另一个查询来检查它是否是因为数据相同,但这对我来说听起来很愚蠢。

另一种方法是在代码点火器中使用Active Record Class,因此该行将类似于:

$error_num = $this->db->update("users", array('firstName' => $newFirstName));
return $error_num;

这是一个更好的解决方案(至少它可以工作,即使由于重复数据没有更新)。但是,我想使用数据库类,例如:

$this->db->query('update table set field = somedata where id=1');

它增加了我的代码对于知道php + SQL但不熟悉代码点火器的编码器的可读性,但是这就是为什么我问如果有人知道如果我以这种方式查询我怎么得到错误号?

即。在PHP中使用mysql_query($ query)时类似于mysql_errno()。

2 个答案:

答案 0 :(得分:1)

两者都会像只有差异一样

如果您使用有效记录类,则所有输入变量都会自动转义

如果您想要安全性,最好使用活动记录类

如果使用普通查询执行,则必须使用$ this-> db-> escape_str()

手动转义输入参数
  $id = $this->db->escape_str($id)

您可以检查查询执行状态。

$status =  $this->db->update("users", array('firstName' => $newFirstName));

if($status)
{
    //here you can check the number of affected rows if required
    echo $this->db->affected_rows();

}else{

      //here you can prcess for failure case
      log_message('Error', $this->db->_error_message());

}

//return the status to required place
return $status

答案 1 :(得分:0)

我已使用此代码进行检查。

$status = $this->db->query('update table set field = somedata where id=1'); 
if($status)
   return true;
else
    return false;