2016-05-05 8 views
0

私のデータベースから値を取得し、それらを変数に代入したいと考えています。これは私のコードです。bind_resultとfetchを使って変数に値を代入する方法は?

$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(); 

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

myテーブルの値を変数$ userに割り当てて、login.phpファイルに戻す必要があります。

$user = $db->getUserByEmailAndPassword($email, $password); 

if ($user != false) { 
    // use is found 
    $response["error"] = FALSE; 
    $response["ngno"] = $user["ngno"]; 
    $response["user"]["email"] = $user["email"]; 
    $response["user"]["name"] = $user["name"]; 
    $response["user"]["user_type"] = $user["user_type"]; 
    echo json_encode($response); 
} else { 
    // user is not found with the credentials 
    $response["error"] = TRUE; 
    $response["error_msg"] = "Login credentials are wrong. Please try again!"; 
    echo json_encode($response); 
} 

私のコードでは、$ user変数に値が割り当てられていないようです。私は間違って何をしていますか?

答えて

0

問題はgetUserByEmailAndPassword()方法で次のステートメントの、

$user = $stmt->fetch(); 

fetch()方法は、結合した変数に準備された文の結果をフェッチし、この方法は、実際true又はfalseを返します。

ここに参照です:

代わり$userを言うと、配列にそれらのバインド変数の値をプッシュし、配列を作成します。最後に、メソッドから配列を返します。

だからあなたgetUserByEmailAndPassword()方法は次のようにする必要があります:私が代わりにbind_resultsのget_resultを使用する場合、それが正しい答えを与えるため

public function getUserByEmailAndPassword($email, $password){ 
    $stmt = $this->conn->prepare("SELECT ngno, email, encrypted_password, name, user_type FROM `guide` WHERE email = ? LIMIT 1"); 
    $stmt->bind_param("s", $email); 

    if ($stmt->execute()) { 
     $stmt->bind_result($ngno, $email, $encrypted_password, $name, $user_type); 
     $user = array(); 
     if($stmt->fetch()){ 
      if($encrypted_password == $password){ 
       $user['ngno'] = $ngno; 
       $user['email'] = $email; 
       $user['name'] = $name; 
       $user['user_type'] = $user_type; 

       $stmt->close(); 
       return $user; 
      }else{ 
       return false; 
      } 

     }else{ 
      return false; 
     } 
    } else { 
     return false; 
    } 
} 
+0

@RyanAluvihare喜んで私は助けることができました。 *乾杯!:-) –

0

私はコメントを入れることができないので、あなたは試してみました:

var_dump($user); 

を、それがNULLを返す場合、特にこのラインあなたの方法getUserByEmailAndPasswordをチェック:あなたは、あなたの$ encrypted_pa​​sswordを比較しているので

$encrypted_password == $password 

を$ password変数に、あなたが比較している$ password変数が暗号化された(ハッシュされるべき)パスワードであることを確かめますか?あなたが応答すると、この回答が更新されます。

+0

私login.phpのコードが正常に動作します。両方のパスワードが一致します。私もprintfステートメントでチェック..問題は、私は$ user = $ stmt-> fetch()doesntが動作すると思うことです。 –

+0

上記のコードは2つの異なるファイルにありますか?上の2つのコードをどのようにマージしましたか? require_onceで?そうでない場合は、SESSIONを使用する必要があります。 – MiSAKACHi

+0

がコメントを更新しました。はい、それはrequir_onceとマージされました。 –

関連する問題