2015-10-07 24 views
0

我在這個項目中工作,這是一個Android登錄應用程序。它從聯機服務器獲取數據。爲什麼我得到一個「致命錯誤:調用一個非對象的成員函數fetch_assoc()」?

註冊工作和數據庫得到更新,但登錄不起作用。 我們使用JSON將數據從服務器解析到應用程序。

這是我的PHP代碼:

public function getUserByEmailAndPassword($email, $password) { 

    $stmt = $this->conn->prepare("SELECT * FROM user_info WHERE email = ?"); 

    $stmt->bind_param("s", $email); 

    if ($stmt->execute()) { 
     $user = $stmt->bind_result()->fetch_assoc(); 
     $stmt->close(); 
     return $user; 
    } 
    else { 
     return NULL; 
    } 
} 

我得到的錯誤是:

Fatal error: Call to a member function fetch_assoc() on a non-object. 
+3

那麼,文檔說''stmt-> bind_result()'返回一個'bool'。所以這個錯誤信息並不奇怪。你不能在布爾上調用一個方法,因爲布爾不是一個對象。 http://php.net/manual/en/mysqli-stmt.bind-result.php – arkascha

+0

你不能在這裏使用'bind_result()'。 'bind_result()'可以讓你爲每個返回的列分配變量,你正在做'SELECT *',所以這是行不通的。如果你有MySQLnd,那麼你可以使用' - > get_result()'。請參閱:http://php.net/manual/en/mysqli-stmt.get-result.php –

+0

** $ stmt-> fetch_assoc(); **應在綁定結果變量後完成。 –

回答

1

bind_result()不是你想在這裏的方法。該方法(順便返回一個布爾值)可以讓你爲查詢中返回的列分配變量。您的查詢使用SELECT *,所以你不能使用bind_result()。您想要的是使用get_result()。這需要安裝mysqlnd driver

$user = $stmt->get_result()->fetch_assoc(); 
+0

感謝您的回覆,但我如何將它安裝在遠程Linux服務器上? –

+0

@SahilSethi:取決於它使用的發行版,但可能需要安裝'php5-mysqlnd'。 –

+0

還沒有找到出路,將嘗試在早上聯繫託管公司。到那時還有其他解決方案? –

相關問題