为什么这个查询返回“”

时间:2015-04-11 23:39:16

标签: php

$servername = "localhost";
$username = "user";
$password = "password";

$connection = mysql_connect($servername, $username, $password);

if (!$connection){
    die("Connection failed: " .mysqli_connect_error());
}

$connected_db = mysql_select_db('users', $connection);
if (!$connected_db){
    die('Can\'t use user database: ' . mysql_error());
}
$result = mysql_query("SELECT pw FROM login WHERE name=\"" . $_POST['username'] . "\"");

登录表如下:

id int(4)
name char(16)
pw char(64)

显然^不是查询,只是表格内容的摘要 对结束($result = mysql_query("SELECT pw FROM login WHERE name...")的查询发现用户名很好,密码使用password_hash(password, DEFAULT_PASSWORD)进行哈希处理并存储在数据库中。但$result['pw']返回一个空字符串。为什么?我正在尝试从数据库中检索存储的哈希以进行登录,以使用登录表单的POST数据与password_verify进行比较。查询SELECT pw FROM login WHERE name=testuser;phpmyadmin

中运行正常

1 个答案:

答案 0 :(得分:0)

首先,在开发模式下,将其添加到PHP脚本的顶部:

error_reporting(E_ALL);
ini_set('display_errors', '1');

上面的内容将允许您检查脚本上的错误。

关于您的代码,您很容易受mysql injection攻击 为避免这种情况,请使用php mysql_real_escape_string函数。 此外,您的双引号是错误的。 您的代码可能如下所示:

$username = mysql_real_escape_string($_POST['username']);
$result = mysql_query("SELECT pw FROM login WHERE name='$username'");