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