嘿所有我目前正在尝试为我正在制作的应用测试登录验证php脚本。我的问题是,当我运行mysql_query时,它返回false(我假设),我似乎无法找出原因。我在phpMyAdmin帐户上运行了相同的sql语句,工作得很好。这是我的代码:
<php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$link = mysql_connect("address", "username", "password") or die("Could not connect");
mysql_select_db(""logininfo,$link) or die("Could not select database");
$sql = "SELECT * FROM 'Users' WHERE 'Email' = '$_POST[Email]' AND 'Password'='$_POST[Password]'";
$result = mysql_query($sql,$link);
if ($result == False){
echo" error here";
}
echo $result;
$numrows = mysql_result($result,0,0);
if ($numrows == 0) {
echo 'Login failed';
}
echo "login success";
?>
还要注意,当我运行mysql_result()时,它会返回一条错误消息,指出:&#34; mysql()期望参数1是资源,给定布尔值。&#34;所以我85%确定错误在于$ result但我不知道如何解决它。谢谢
答案 0 :(得分:3)
SQL injection attack并且您的查询中引用不正确:
$sql = "SELECT * FROM 'Users' WHERE 'Email' = '$_POST[Email]' AND
^-----^--- should be `, not '
字段应引用反引号,而不是'
。 '
将它们变成字符串。
MySQL可以告诉你这个:
if ($result === false) {
die(mysql_error());
}
答案 1 :(得分:1)
在mysql中
SELECT * FROM 'Users'
是无效的陈述。
应该是
SELECT * FROM `Users`
或
SELECT * FROM Users
反引号通常用于避免使用任何保留关键字时发生冲突。
答案 2 :(得分:0)
您的代码存在一些问题(我没有开枪,只是指出错误)
1)<php
应该是脚本开头的<?php
。
2)mysql_select_db(""logininfo,$link)
不正确,我认为你的意思是mysql_select_db("logininfo",$link)
3)$sql = "SELECT * FROM 'Users' WHERE 'Email' = '$_POST[Email]' AND 'Password'='$_POST[Password]'";
有几个问题。 'Users'
'Email'
和'Password'
应该用反对标记括起来或不引用。
$sql = "SELECT * FROM Users WHERE `Email` = '$_POST[Email]' AND Password='$_POST[Password]'";
电子邮件附在反引号中,用户和密码不包含在内,两种方式都完全有效且可以接受。不需要引用引号来引用这些名称,但是当列,数据库或表名称包含无效字符或是保留关键字时。
4)作为旁注,您应该使用预先准备好的语句移至MySQLi或PDO,但使用MySQLi,您可以使用mysqli_
代替{{{{}}来保持相同的代码。 1}}减去几个改变的函数。在最新版本的PHP中不推荐mysql
(我认为它以PHP 5.5开头),并且使用预准备语句可以保护自己免受SQL注入,这非常重要。