php mysql_query()返回false

时间:2014-04-24 18:07:51

标签: php mysql sql

嘿所有我目前正在尝试为我正在制作的应用测试登录验证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但我不知道如何解决它。谢谢

3 个答案:

答案 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)作为旁注,您应该使用预先准备好的语句移至MySQLiPDO,但使用MySQLi,您可以使用mysqli_代替{{{{}}来保持相同的代码。 1}}减去几个改变的函数。在最新版本的PHP中不推荐mysql(我认为它以PHP 5.5开头),并且使用预准备语句可以保护自己免受SQL注入,这非常重要。