2013-01-20 188 views
-2

我無法從我的表中獲取數據時出現以下問題。從表中獲取記錄

$email = $_POST['email']; 
$password = md5($_POST['password']); 

$query = "SELECT * FROM users WHERE (email,password) VALUES (:email,:password)"; 
    $stmt = $dbh->prepare($query); 
    $stmt->bindParam(':email', $email); 
    $stmt->bindParam(':password', $password); 
    $stmt->execute(); 

if(!$query){ 
    echo 'Whoops, something went wrong!'; 
} else { 
    while($r = $stmt->fetch(PDO::FETCH_LAZY)){ 
     echo $r['surname']; 
    } 
}; 

任何人都可以看到我哪裏會出錯嗎?通過不工作,沒有什麼是輸出到我的瀏覽器

+1

是錯誤cheking和顯示? – 2013-01-20 19:33:13

+0

你正在運行的條件$查詢這只是一個字符串我想你想檢查例如$ stmt = $ dbh-> prepare($ query)返回正確 – Pankrates

回答

3

你似乎混合了插入和選擇語法。

你選擇語法應該是這樣的:

$query = "SELECT * FROM users WHERE email=:email AND password=:password"; 

除此之外,你應該看看周圍的SO和搜索secure password hashing作爲md5是不安全的。

+0

這似乎仍然工作@jeroen – Liam

+0

@Liam你應該爲數據庫調用添加錯誤處理,例如:http://php.net/manual/en/pdo.errorinfo.php – jeroen

0

您未使用有效的SQL查詢。 VALUES()僅用於UPDATE語句。

嘗試使用的語句

SELECT * FROM users WHERE email = :email AND password =:password 
0
SELECT * FROM users WHERE (email,password) VALUES (:email,:password) 

需求是

SELECT * FROM users WHERE email = :email AND password = :password 

我也建議你使用鹽值和密碼來抵禦彩虹表攻擊。

-1

正如上面的用戶注意到的,問題出在SQL查詢。 爲了捕獲並顯示SQL錯誤,您應該在將來使用try catch語句。

try { 
    /*Code to access database with PDO*/ 
} 
catch(PDOException $e) { 
    echo $e->getMessage(); 
}