2016-12-08 71 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()'。你需要使用'bind_result()'。 – Barmar

回答

1

mysqli_stmt類沒有方法fetch_assoc(),只有fetch()

例如:

$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類的方法:用準備的語句

$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

謝謝你的幫助。我在網上查找並找到了類似的解決方案,但我的語法和結構卻錯了。這幫助我更好地理解它。 –