2016-04-22 138 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行是第二個綁定,它給出了錯誤,但使用標準查詢一個第一個綁定,這是什麼令我困惑 –