2016-04-22 113 views
0

我有一个问题与我准备好的声明,我已经通过堆栈搜索答案,并尝试了很多关闭他们无济于事,我已经检查插入语句是正确的,我也尝试使用声明作为似乎工作,定期声明 我得到的错误是如下Mysqli bind_param错误

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; 
     } 
    } 
+0

你不能同时绑定多个参数。您应该在'execute()'中将它们作为数组传递,或者每次绑定一个参数。前者更模块化,更少冗余 – Terry

+0

错误不能在第23行 - 代码只有15行! –

+0

是的,但它是一个类有更多的线条的一部分,这是毫无意义的发布全班时,这是错误的功能 –

回答

0

添加的这两行代码后,为什么你的代码没有第一$stmt->execute

$result = $stmt->get_result(); 
$count_row = $result->num_rows; 

的原因是因为你正试图从一个准备语句对象获得的行数,而不是结果的

+0

在尝试标准查询后忘记更改回来准备,更新问题以备回添准备,这也同样给我带来了同样的问题 –

+0

所以错误是由第二次调用bind_param引起的? – dimlucas

+0

23行是第二个绑定,它给出了错误,但使用标准查询一个第一个绑定,这是什么令我困惑 –