我想为一个类登录(所以我现在没有考虑阻止SQL注入)并且我在使用行计数时遇到问题,看看我是否可以登录
我如何计算选择中的行数?我尝试了一些没有用的东西。
我得到的错误是在有评论的行中。
$host = "localhost";
$serverusername = "root";
$serverpassword = "";
$database = "usuarios";
$table = "user";
$username = $_POST['username'];
$password = $_POST['password'];
$mysqli = new mysqli($host, $serverusername, $serverpassword, $database);
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
$query = "SELECT * FROM ".$table." WHERE `username` = ".$username." AND `password` = ".$password;
$result = $mysqli->query($query);
$row = $result -> num_rows; //this line has an error. Trying to get property of non-object
if ($row != 0)
{
header('Location : index.html');
die();
}
else
{
echo "password incorrecta!";
}
$mysqli -> close();
答案 0 :(得分:1)
您需要在引号中加上 $ username 和 $ password :
$query = "SELECT * FROM $table WHERE `username` = '$username' AND `password` = '$password'";
此代码易受SQL注入攻击。
答案 1 :(得分:0)
假设您已将错误报告设置为开启(因为您提供了错误),您的下一步是对查询或输出进行故障排除。
要查看查询有什么问题,请尝试调试它以下是我调试查询的方法
将查询回显到屏幕
$query = "SELECT * FROM ".$table." WHERE `username` = ".$username." AND `password` = ".$password;
echo $query;
从屏幕上复制打印的查询
在您的数据库管理器(phpmyadmin)
阅读sql错误和
相应地更改您的查询
如果查询提供了正确的输出,那么在查询后运行的代码就会出现问题。否则你必须在这里添加你的SQL错误,所以我们可以修复。
<强>旁注:强>
不应$row = $result -> num_rows;
为$row = $result->num_rows;
(不确定是否重要,额外空间)
注2:阅读评论后
可能你的密码存储了“哈希”,现在你正在查询(不是“哈希”)。根据您在数据库中记录密码的方式,您应该相应地散列密码。