2016-05-05 15 views
1

このエラーを修正するにはどうすればよいですか?これは私のコードです。致命的なエラー:非オブジェクトのfetch_assoc()メンバ関数を呼び出す

$stmt = $this->conn->prepare("SELECT ngno, email, encrypted_password, name, user_type FROM `guide` WHERE email = ?"); 

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

    if ($stmt->execute()) { 
     $user = $stmt->bind_result($ngno, $email, $encrypted_password, $name, $user_type)->fetch_assoc(); 
     $stmt->close(); 

リモートIMデータベースを使用しています。私もローカルホストでこれを試してみました。しかし、私はエラー、致命的なエラー呼び出しbooleanのfetch_assoc()を呼び出す

このコードはbind_resultの代わりにget_resultを使って動作しました。私はbind_resultを使う必要があります。どんな助けもありがとう。

EDIT 1:

私は今、このエラーを取得し、次のように

$stmt = $this->conn->prepare("SELECT ngno, email, encrypted_password, name, user_type FROM `guide` WHERE email = ?"); 

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

    if ($stmt->execute()) { 
     $stmt->bind_result($ngno, $email, $encrypted_password, $name, $user_type); 
     $user = $stmt->fetch_assoc(); 
     $stmt->close(); 

     if($encrypted_password == $password){ 
      return $user; 
     } 
    } else { 
     return NULL; 
    } 

を、コードを変更しました。致命的なエラー:未定義のメソッドを呼び出すmysqli_stmt :: fetch_assoc()

私のクエリは失敗しますか?

+0

'$ email'が設定されているか確認してください。 –

答えて

1

bind_result()は、オブジェクトを返すのではなく、ステータスを返します。これは、そのオブジェクトから別のメソッド呼び出しに連鎖できないことを意味します。あなたは2つの別々の行でそれを行う必要があります。

詳細はbind_result manual pageを参照してください。

0

上記のJulie Pelletierのように、オブジェクトを返さないので、bind_resultをチェーンできません。これを試してみてください:

$stmt = $this->conn->prepare("SELECT ngno, email, encrypted_password, name, user_type FROM `guide` WHERE email = ?"); 

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

if ($stmt->execute()) { 
    $stmt->bind_result($ngno, $email, $encrypted_password, $name, $user_type); 
    $user = $stmt->fetch(); 
    $stmt->close(); 

注: mysqli_stmt_execute()を使用して、mysqli_stmt_fetch()機能は、追加のクエリを実行する前に、データをフェッチするために使用する必要があります。

+0

返信いただきありがとうございます。私はこれを試みた。今、私はエラーを取得します。定義されていないメソッドmysqli_stmt :: fetch_assoc()を呼び出します。私のクエリは失敗していますか?私はissetで電子メールとパスワードの両方をテストしました。値は正しい。 –

関連する問題