【问题标题】:PHP MYSQLI query error?PHP MYSQLI 查询错误?
【发布时间】:2010-04-13 12:27:08
【问题描述】:

嘿,这是我的登录脚本,使用 PHP5 和 MYSQLi,我只是帮助我发现了查询中的错误,但它仍然不允许我登录,即使用户名和密码正确并且在数据库中,它只是保持返回错误:您的用户名和密码与我们的数据库中的任何内容都不匹配。但我知道他们会大声笑……有人能发现问题吗?

//Check if the form has been submitted
    if (isset($_POST['login'])) 
    {   
        //Check if username and password are empty
        if ($_POST['username']!='' && $_POST['password']!='') 
        {       
            //Create query to check username and password to database
            $validate_user = $mysqli->query('SELECT id, username, password, active FROM users WHERE = username = "'.$mysqli->real_escape_string($_POST['username']).'" AND password = "'.$mysqli->real_escape_string(md5($_POST['password'])).'"');

            //We check if the query returns true
            if ($validate_user->num_rows == 1)
            {
                $row = $validate_user->fetch_assoc();

                //Check if the user has activated there account
                if ($row['activated'] == 1)
                {
                    $_SESSION['id'] = $row['id'];
                    $_SESSION['logged_in'] = true;
                    Header('Location: ../main/index.php');
                }
                //Show this error if activation returns as 0
                else {
                    $error = '<p class="error">Please activate your account.</p>';
                }
            }
                //Show this error if the details matched any in the db
                else {      
                    $error = '<p class="error">Your username and password are not in our database!</p>';        
                }
            }
                //Show this error if the username and password field have not been entered
                else {
                    $error = '<p class="error">Please enter your username and password.</p>';
                }
    }

【问题讨论】:

  • 密码字段中是否有 md5 哈希?
  • 是的,要我给你看吗?
  • 您是否有多个用户使用此用户名/密码组合?
  • 不,我是数据库中唯一的用户,因为我正在开发 atm :(
  • 您不会检查查询执行是否有错误。添加此代码 echo $mysqli->error;看看有没有

标签: php login mysqli


【解决方案1】:

代替

SELECT ... FROM users WHERE = username = ...

应该是

SELECT ... FROM users WHERE username = ...

如果您不断遇到此类问题,请尝试将查询存储在一个变量中并回显它,这样您就可以将其复制粘贴到您的数据库管理工具中,看看是否有任何查询错误。

【讨论】:

  • 感谢它只是一个简单的错误类型的数据库字段:(
【解决方案2】:

为了使其最可靠,我建议根据主要错误处理设置触发此错误:

//just in sake of readability
$user = $mysqli->real_escape_string($_POST['username']);
$pass = $mysqli->real_escape_string(md5($_POST['password']));

$sql = "SELECT id, username, password, active FROM users 
        WHERE username = '$user' AND password = '$pass'";

$res = $mysqli->query($sql) or trigger_error(mysqli->error.$sql);

注意trigger_error 函数。它会将错误消息带到标准错误输出。在开发 PC 上,它将是浏览器的屏幕或生产服务器上的日志文件。

【讨论】:

    猜你喜欢
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多