Php Codeigniter查询Num行
我在CI应用程序中有以下代码:Php Codeigniter查询Num行,php,codeigniter,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();
$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,为什么会失败?这是因为您正在执行
插入
查询。修改数据的查询在所有情况下都返回TRUE
,因此您真正尝试的是TRUE->num_rows()
,这没有任何意义,会导致错误
您实际需要检查的是$this->db->impacted_rows()
,它将告诉您有多少行被插入到数据库中
尽管在本例中没有这样做,但值得注意的是,
受影响的_rows()
只会返回在查询过程中实际更改的行数,因此更新不实际修改数据的查询(即,如果字段已经具有查询试图设置的值),然后该行将不会反映在CodeIgniter文档中受影响的行()值中。
当运行“读取”类型的查询时,query()函数返回一个数据库结果对象,您可以使用它来显示结果。当运行“write”类型的查询时,它只会根据成功或失败返回TRUE或FALSE。检索数据时,通常会将查询分配给您自己的变量,如下所示:
您的查询,因为它是一个INSERT,只会返回TRUE或FALSE。数据库库是否已加载?@IANBridley如果库未加载,错误肯定会出现在if语句之前。因此,您要查看的是if($result){return$this->db->INSERT_id()}是。。。这里确实发生了这样的事情:)