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