0

我在 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 ,为什么会失败?

4

2 回答 2

0

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

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

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

于 2013-01-26T12:07:27.637 回答
0

来自 CodeIgniter 的文档。

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

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

于 2013-01-26T12:09:38.657 回答