我想登录一个类(所以我现在不想阻止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();
您需要将$username和$密码放在引号中:
$query = "SELECT * FROM $table WHERE `username` = '$username' AND `password` = '$password'";
此代码容易受到SQL注入的攻击。
假设您已经将错误报告设置为on(因为您提供了给定的错误),那么下一步就是对查询或输出进行故障排除。
要查看您的查询有什么问题,请尝试调试它。以下是我如何调试查询的
-
将查询返回到屏幕
$query = "SELECT * FROM ".$table." WHERE `username` = ".$username." AND `password` = ".$password; echo $query;
-
从屏幕复制打印的查询
-
在数据库管理器(phpmyadmin)中执行查询
-
读取sql错误和
-
相应地更改您的查询
如果查询给出了正确的输出,那么问题就出在查询后运行的代码上。否则,您必须在此处添加sql错误,这样我们才能修复。
旁注:
$row = $result -> num_rows;
不应该是$row = $result->num_rows;
吗(不确定是否重要,额外的空间)
注意2:阅读评论后
可能您的密码是"散列"存储的,现在您正在按原样查询(而不是"散列")。根据你在数据库中散列密码的方式,你应该相应地散列密码帖子。