【发布时间】:2016-04-22 11:53:10
【问题描述】:
我的准备语句有问题,我在堆栈中搜索了答案,并尝试了很多都无济于事,我检查了插入语句是否正确,我也尝试过使用该语句作为常规语句似乎有效的声明, 我得到的错误如下
Fatal error:call to function bind_param()on a non object in ** on line 23
当我对第一个查询使用普通查询时,第二个不会显示错误
代码是
public function reg_user($name,$username,$password,$email){
$password = password_hash($password);
$stmt = $this->db->prepare("SELECT uid FROM users WHERE uname= ? OR uemail = ?");
$stmt->bind_param("ss", $username,$email);
$stmt->execute();
$count_row = $stmt->num_rows;
if($count_row == 0){
$stmt = $this->db->prepare("INSERT INTO users (uname,upass,fullname,uemail) VALUES(?,?,?,?)");
$stmt->bind_param("ssss", $username,$password,$name,$email); //line 23
$return = $stmt->execute();
return $return;
} else{
return false;
}
}
【问题讨论】:
-
不能同时绑定多个参数。您应该将它们作为数组传递给
execute(),或者每次绑定一个参数。前者更模块化,冗余更少 -
错误不能出现在第23行——代码只有15行!
-
是的,但它是包含更多行的类的一部分,当这是有错误的函数时,发布完整类是没有意义的
-
不知道这里有没有人对真实的解释感兴趣。