PHP SQL行数

时间:2015-11-23 00:40:01

标签: php mysql

我想为一个类登录(所以我现在没有考虑阻止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();

2 个答案:

答案 0 :(得分:1)

您需要在引号中加上 $ username $ password

$query = "SELECT * FROM $table WHERE `username` = '$username' AND `password` = '$password'";

此代码易受SQL注入攻击。

答案 1 :(得分:0)

假设您已将错误报告设置为开启(因为您提供了错误),您的下一步是对查询或输出进行故障排除。

要查看查询有什么问题,请尝试调试它以下是我调试查询的方法

  1. 将查询回显到屏幕

    $query = "SELECT * FROM ".$table." WHERE `username` = ".$username." AND `password` = ".$password;
    echo $query;
    
  2. 从屏幕上复制打印的查询

  3. 在您的数据库管理器(phpmyadmin)

  4. 中执行查询
  5. 阅读sql错误和

  6. 相应地更改您的查询

  7. 如果查询提供了正确的输出,那么在查询后运行的代码就会出现问题。否则你必须在这里添加你的SQL错误,所以我们可以修复。

    <强>旁注:

    不应$row = $result -> num_rows;$row = $result->num_rows;(不确定是否重要,额外空间)

    注2:阅读评论后

    可能你的密码存储了“哈希”,现在你正在查询(不是“哈希”)。根据您在数据库中记录密码的方式,您应该相应地散列密码。