2016-11-12 114 views
0

我正在製作一份php文檔,如果用戶在數據庫中並且輸入了正確的用戶名和密碼,則用戶所在的日誌。爲了安全起見,我使用了準備好的語句,但是我無法從SELECT查詢中獲得結果來設置我的網站所需的會話變量。這裏是我的代碼...從準備好的SELECT語句中提取結果

<?php 
session_start(); 
require 'config.php'; #This file has all connection info 
#$C is the mysqli connection 
#$USERS is the name of the table in my database 
$sql = $C->prepare('SELECT ID,Username,Favorites FROM '.$USERS.' WHERE Email=? AND Password=PASSWORD(?)'); 
$sql->bind_param("ss", $e,$p); 

$e = $_POST['e'];#email 
$p = $_POST['p'];#password 

$query = $sql->execute(); 
$sql->store_result(); 
$numrows = $sql->num_rows; 
if($numrows == 1) { 
    $sql->bind_result($id,$username,$favs); 
    while($sql->fetch()) { 
     $_SESSION['ID'] = $id; 
     $_SESSION['Name'] = $username; 
     $_SESSION['favs'] = $favs; 
     $_SESSION['valid'] = true; 
    } 
    echo 'true'; 
} 
else { 
    echo 'User Not Found'; 
} 

這正好呼應「用戶未找到」,因爲$總是numRows行= 0,我確信,所有輸入的信息是正確的。

+0

也做一些調試'var_dump'或'print_r'來測試你的查詢。 –

+0

它應該是'$ query - >> bind_result($ id,$ username,$ favs);'而不是'$ sql - > ...' – Mihai

+0

@Mihai你錯了 –

回答

1

將變量賦值移到bind_params調用之上的$ e和$ p,或者至少在調用之上聲明它們。

bind_params的參數是通過引用傳遞的,所以在綁定之後但在執行之前對變量的更改生效,但AFAIK變量必須在綁定調用之前存在。

+1

請downvoters請解釋他們的理由,以幫助我理解爲什麼我的答案不好或甚至不正確? – Quagaar