mysql php查询死亡

mysql php查询死亡,php,mysql,login-script,Php,Mysql,Login Script,我正在创建一个登录php脚本,该脚本通过一个名为users的表(包含用户列表)连接到mysql数据库。我遇到了一个看起来像空集或mysql错误的问题 我包含了一个连接错误echo和一个查询die echo,脚本正在回显后一个错误,该错误为我提供了查询字符串。我在phpMyAdmin中运行这个精确的查询,并得到我期望的结果(它返回用户) 为什么它会死 $cxn是在调用此POST到此页面的登录页面上定义的 $pass = addslashes($_POST['password']); $email

我正在创建一个登录php脚本,该脚本通过一个名为users的表(包含用户列表)连接到mysql数据库。我遇到了一个看起来像空集或mysql错误的问题

我包含了一个连接错误echo和一个查询die echo,脚本正在回显后一个错误,该错误为我提供了查询字符串。我在phpMyAdmin中运行这个精确的查询,并得到我期望的结果(它返回用户)

为什么它会死

$cxn是在调用此POST到此页面的登录页面上定义的

$pass = addslashes($_POST['password']);
$email = addslashes($_POST['username']);
$pw = md5($_POST['password']);


$query = "SELECT * FROM `users` WHERE (`user_email`='$email' AND `user_pass`='$pw')" ;


if (mysqli_connect_errno()){         
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}                               

$result = mysqli_query($cxn,$query) or die(mysqli_error($cxn)."Query= ".$query);
我保留了第一个版本。这是具有相同结果的当前化身

    <?php

    $email = ($_POST['username']);
    $pw = md5($_POST['password']);

    $query = "SELECT * FROM `users` WHERE (`user_email`='$email' AND `user_pass`='$pw')" ;

    if (mysqli_connect_errno($cxn)){          //remove later
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }                                  //to here

    $result = mysqli_query($cxn,$query) or die(mysqli_error($cxn)."Query=".$query);

    echo '<hr>';
    echo $result;
    while($row = mysql_fetch_array($result)){
        echo $row['user_email'];
        echo '<hr>';
        echo $row['user_pass'];
        echo '<hr>';
        echo $row['user_fname'];
        echo '<hr>';
    }
?>

因为您在检查连接时未传递
$cxn
变量:

更改此项:

if (mysqli_connect_errno()){  
致:


我刚刚注意到了这一点,但您有以下几点:

$email = ($_POST['username']);
这应该是简单的:

$email = $_POST['username'];
此外,请尝试这样编写查询:

$query = "SELECT * FROM `users` WHERE `user_email` = '".$email."' AND `user_pass` = '".$pw."'";

首先,这个
$pw=md5($_POST['password'])
是一个“no no”。您从数据库返回的确切错误消息是什么?Echo$query,请注意,有一个mysqli_uu函数用于转义表单数据。这些类型的查询要求绑定语句。从安全的角度来看,这一切都很糟糕。我猜问题可能在于您使用addslashes()。如果在添加用户的初始插入过程中没有使用该选项,则无法以这种方式查找用户,因为数据库中的值不匹配。此外,永远不要在密码中添加斜杠()。如果您不希望密码中包含某些字符,请通过正则表达式运行它,并提醒用户这些字符无效。毕竟,一旦它被散列,它就不会造成任何伤害。仍然是一样的。我猜连接不是问题所在。实际上我试过从``users
“;`看看我能不能得到什么。但是没有。
var\u dump($result)
var\u dump(mysql\u fetch\u array($result)
都是空的。此外,评论系统正在搞乱我的tics,但我确实像你一样使用了它们。你是否从你的$email=($\u POST['username'])中删除了(和);声明?如果您没有对$U POST调用进行任何操作,则不能将其括起来。但是,我建议您使用trim($U POST['username']);因为它将删除开头和结尾的空格。如果有人意外地在其姓名之前或之后打上空格,这将非常有用。没有理由重复打勾。这就是为什么我重新编写您的查询,以帮助避免引用问题。我确实删除了空格,但没有重复打勾。请参阅我的第二条评论。
$query = "SELECT * FROM `users` WHERE `user_email` = '".$email."' AND `user_pass` = '".$pw."'";