Codeigniter查询Num行

时间:2013-01-26 11:58:47

标签: php codeigniter

我在CI应用程序中有以下代码:

$query = "INSERT INTO user(user_name,user_email) VALUES(?,?)";
        $result = $this->db->query($query,array($userName,$email));
        if ($result->num_rows()>0)
            return $this->db->insert_id();
        else
            return null;

这会产生错误;致命错误:在第38行的C:\ xampp \ htdocs \ cmdline \ application \ models \ mlogin.php中的非对象上调用成员函数num_rows()

第38行是行数大于0的条件。 现在我不知道发生了什么 - 我正在使用CI的文档检查行数是否大于0,为什么会失败?

2 个答案:

答案 0 :(得分:0)

这是因为您正在进行INSERT查询。在所有情况下,修改数据的查询返回TRUE,因此您真正尝试的是TRUE->num_rows(),这没有任何意义,导致错误。

您实际想要检查的是$this->db->affected_rows(),它会告诉您在数据库中插入了多少行。

虽然在这种情况下您没有这样做,但值得注意的是affected_rows()只会返回查询期间实际更改的行数,因此UPDATE查询不会实际修改数据(即,如果字段已经具有查询尝试将其设置为的值),则该行不会反映在affected_rows()值中。

答案 1 :(得分:0)

来自CodeIgniter的文档。

  

query()函数在运行“read”类型查询时返回数据库结果对象,您可以使用它来显示结果。当运行“write”类型查询时,它会根据成功或失败返回TRUE或FALSE。检索数据时,通常会将查询分配给您自己的变量,如下所示:

您的查询,因为它是INSERT只会返回TRUE或FALSE。