2016-12-08 11 views
1

バインディングパラメータにはまだ問題があります。バインドパラメータが原因でfetch_assoc()でエラーが発生する

私は単純なパスワードハッシュチェックを作成しましたが、今はSQLインジェクションを防ぐために限定されたパラメータでそれをしようとしています。

$sql = "SELECT * FROM users WHERE Email='{$_POST['Email']}'"; 
$result = mysqli_query($db,$sql); 


$row = mysqli_fetch_assoc($result); 
$hash_pwd = $row['Password']; 
$hash = password_verify($_POST['Password'], $hash_pwd); 

そしてここでは、結合パラメータで私の試みである:ここで

は働く元である

$result = $db->prepare("SELECT * FROM users WHERE Email= ?"); 
$result->bind_param("s", $_POST['Email']); 
$result->execute(); 
$result->store_result(); 

$row = $result->fetch_assoc(); 
$hash_pwd = $row['Password']; 
//hash checks password 
$hash = password_verify($_POST['Password'], $hash_pwd); 

後者のリターンは、 "未定義のメソッドmysqli_stmtに呼び出し:: FETCH_ASSOC()"

+0

あなたが準備された文で、 'FETCH_ASSOCを()'を使用することはできません。

$stmt = $db->prepare("SELECT * FROM users WHERE Email= ?"); $stmt->bind_param("s", $_POST['Email']); // bind_result() method takes references to variables for storing a results. $stmt->bind_result($password); // fetch() return true, false or null $return = $result->fetch(); if ($return) { echo $password; // Contains a value of first column } 

fetch_assocmysqli_resultクラスのメソッドです。 'bind_result()'を使う必要があります。 – Barmar

答えて

1

mysqli_stmtクラスにはメソッドがありませんfetch_assoc()fetch()のみです。例えば

$stmt = $db->prepare("SELECT * FROM users WHERE Email= ?"); 
$stmt->bind_param("s", $_POST['Email']); 

$stmt->execute(); 

// Get the instance of mysqli_result: 
$result = $stmt->get_result(); 
$row = $result->fetch_assoc(); 

if ($row) { 
    echo $row['password']; 
} 
+0

ありがとうございました。私はオンラインで探していて、似たような解決策を見つけましたが、私の構文と構造は間違っていました。これは私がそれをもっとよく理解するのを助けました。 –

関連する問題