Php 为什么这个查询返回“quot&引用;
登录表如下所示:Php 为什么这个查询返回“quot&引用;,php,Php,登录表如下所示: $servername = "localhost"; $username = "user"; $password = "password"; $connection = mysql_connect($servername, $username, $password); if (!$connection){ die("Connection failed: " .mysqli_connect_error()); } $connected_db = mysql_sele
$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'] . "\"");
显然,^
不是一个查询,只是一个表组成的摘要
最后的查询
($result=mysql\u query(“SELECT pw FROM login WHERE name…”)
发现用户名很好,密码使用密码散列(password,DEFAULT\u password)
散列并存储在数据库中。但是$result['pw']
返回一个空字符串。为什么?我试图从数据库中检索存储的哈希值以进行登录,以便与使用登录表单的POST数据验证的密码进行比较。查询从登录名中选择pw,其中name=testuser;
在phpmyadmin
中工作正常。首先,在开发模式下,将其添加到页面顶部u php脚本:
id int(4)
name char(16)
pw char(64)
这将允许您检查脚本上的错误
关于你的代码,你很容易受到攻击
要避免这种情况,请使用php
函数。
而且,你的双引号放错地方了。
您的代码可能如下所示:
error_reporting(E_ALL);
ini_set('display_errors', '1');
sql喜欢单引号中的值,请尝试$result=mysql_query(“从登录名中选择pw,其中name=””、$\u POST['username'].“””);谢谢,我意识到了注入漏洞。这是我未婚夫的一个小型个人项目,所以注入现在不是什么大问题,尽管我意识到了注入的危险。
$username = mysql_real_escape_string($_POST['username']);
$result = mysql_query("SELECT pw FROM login WHERE name='$username'");