2013-01-20 192 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(); 
}