【问题标题】:MySQL/PHP: Cannot select from database but the element existsMySQL/PHP:无法从数据库中选择,但元素存在
【发布时间】:2013-07-19 23:05:03
【问题描述】:

我知道这个问题被问了很多,但我似乎找不到适合我的正确答案。在 PHPMyAdmin 中,用户名“user”和密码“test”存在——但由于某种原因,它一直说它不存在。代码的输出是:

成功连接到数据库邮箱:*用户*密码:*test*用户名和密码不匹配

代码如下:

$con = new mysqli('somewhere.com','admin','*****','nameofdb');
    if($con->connect_errno > 0){
        die('Unable to connect to database [' . $con->connect_error . ']');
    }
    else{
        echo "Successfully connected to DB ";
    }
$email = mysqli_real_escape_string($con, $_POST['eml']);
       $password = mysqli_real_escape_string($con, $_POST['pwd']);
       //$encrPassword = md5($password);


       $login = $con->query("SELECT * 
                            FROM logininfo 
                            WHERE email = $email
                            AND password = $password");
       if($login == FALSE){
            echo " email:*$email* ";
            echo " password:*$password* ";
            //echo " password:*$encrPassword* ";

            echo "Username and Password does not Match";
       }
       else {
            echo "Hey this works";
       //Check if user is logged in, if not then redirect.     
            /*session_start();
            if($_SESSION['loggedin'] == FALSE){
                $_SESSION['loggedin'] = TRUE;
                $_SESSION['username'] = $username;
            }*/
            header("Location: ../browse/index.php");
       }
        mysqli_close($con);

【问题讨论】:

    标签: php mysql sql select mysqli


    【解决方案1】:

    查询变量必须用引号括起来吗?

    SELECT * FROM sometable WHERE somecol='$someVar' AND someothercol='$someothervar';

    【讨论】:

      【解决方案2】:

      查询有错误,如果你回显查询并在mysql上测试它可能更容易调试,你可以这样做:

      $query = "SELECT * 
                FROM logininfo 
                WHERE email = $email
                AND password = $password";
      echo $query;
      

      祝你好运!

      【讨论】:

        【解决方案3】:

        两个简单的步骤 1..在 phpmyadmin 中检查您的数据库,这些用户名和密码与您输入的用户名或密码匹配。如果是回显查询以了解内部查询的内容。 2..如果是,请确保您是否在注册时使用 md5 加密,如果您正在使用,则在登录时解密,如

        $password=md5($password);
        

        【讨论】:

        • 我用的是md5加密,后来拿出来帮助调试过程。每当我回显我得到的查询时:DB SELECT * FROM users WHERE email = test AND password = test
        • 在db中使用md5密码长度不应该太短,在注册和登录中删除加密然后尝试。
        • 我删除了所有加密。没有运气。 :|
        • $email = mysqli_real_escape_string($con, $_POST['eml']); $password = mysqli_real_escape_string($con, $_POST['pwd']); $query = "SELECT (email, password) FROM users WHERE email = $email AND password = $password"; if($result = mysqli_query($con, $query)){ echo "嘿,这行得通";
        • 你的查询是错误的,删除选择子句后的括号写喜欢并在电子邮件和密码周围使用单引号写这个“SELECT * FROM users WHERE email='$email' AND password='$password' ".use mysql_query() 而不是 mysqli_query()
        猜你喜欢
        • 2019-02-11
        • 2020-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-01
        • 1970-01-01
        相关资源
        最近更新 更多