2

我敢肯定,你们中的一些人已经厌倦了我的帖子,因为它们看起来很基础,但是我遇到了与“mysql_result()”类似的问题。我的代码不断输出此错误:

Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-5.3.9\www\Image Upload\func\user.func.php on line 10

当我检查反引号是否在正确的位置时..我看不出我的错误可能在哪里..这是代码:

function login_check($email, $password){
       $email = mysql_real_escape_string($email);
       $login_query = mysql_query("SELECT COUNT (`user_id`) as `count`, `user_id` FROM `users` WHERE `email` = '$email' AND `password` = '".md5($password)."'");
       return (mysql_result($login_query, 0) == 1) ? mysql_result($login_query, 0, '$user_id') : false;
}

这是第 10 行:

return (mysql_result($login_query, 0) == 1) ? mysql_result($login_query, 0, '$user_id') : false;

感谢大家的耐心和帮助!-TechGuy24

4

3 回答 3

2

语法错误:

$login_query = mysql_query("SELECT COUNT (`user_id`) as `count`, `user_id` FROM `users` WHERE `email` = '$email' AND `password` = '".md5($password)."'");
                                                        ^--   ^--

反引号用于转义字段/表规范中的保留字。as不需要转义别名,因为它显然不是字段/表名。

您还使用了聚合函数,count()但也选择了非聚合字段 ( user_id),没有group by子句,因此 mysql 也会抱怨这一点。

如果您的代码结构如下:

$result = mysql_query($sql) or die(mysql_error());
                           ^^^^^^^^^^^^^^^^^^^^^^

您会看到语法错误消息。永远不要假设查询已经成功。始终检查错误。即使您的 SQL 语法 100% 完美,也有太多其他原因导致无法检查。

于 2012-08-29T04:27:28.687 回答
0

正如 zerkms 所说,你不需要COUNT.

问题:COUNT不喜欢它和括号之间的空格,所以:

COUNT (

应该

COUNT(

编辑:

这应该会更好:

SQL:

SELECT `user_id` FROM `users` WHERE `email` = '<email>' AND `password` = '<hash>'

PHP:

$result = mysql_query($query);
$login = mysql_result($result);
if(mysql_num_rows($result) == 0) return false;
return $login['user_id'];

顺便说一句,你有风险...

SQL INJECTION    *------==========[');SQL--|----]=====0

您应该使用 MySQLi 或 PDO,以及准备好的语句。

于 2012-08-29T04:29:23.150 回答
0

执行 SQL 语句时似乎出错,mysql_query仅在成功时返回资源。出错时,它会返回false(请参阅mysql_query 上的 PHP 手册)。这解释了错误,因为您mysql_result使用值false作为第一个参数进行调用。

于 2012-08-29T04:30:58.073 回答