提供的参数不是有效的MySQL结果资源

时间:2011-08-27 11:37:36

标签: php mysql

我在当地的WAMP机器上开发了一个小型CMS。

将项目导出到托管后,出现以下问题

  

警告:mysql_fetch_assoc():提供的参数不是第44行/homepages/36/d288053636/htdocs/MYWEBSITE/admin/index.php中的有效MySQL结果资源

     

警告:无法修改标题信息 - 已在/ homepages / 36 / d288053636 / htdocs / MYWEBSITE / admin中发送的标题(输出从/homepages/36/d288053636/htdocs/MYWEBSITE/admin/index.php:44开始)第62行/index.php

第44行:

$row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM pureUser WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'"));

第62行:

header("Location: index.php");

这些错误意味着什么?

4 个答案:

答案 0 :(得分:3)

SQL查询未正确完成。您很可能已上载该脚本,但未上载数据库或数据库凭据错误。

提示在失败的mysql_query语句之后放入以下代码时,您可以获得非常好的描述性错误消息:

if (mysql_error()) {
    die(mysql_error());
}

答案 1 :(得分:1)

第一个错误意味着您在不是MySQL资源的情况下调用mysql_fetch_assoc()mysql_query应该返回一个合适的资源,所以如果你收到这个错误,这可能意味着你的查询失败了(可能配置错误)。

由于HTTP的工作方式,在您开始编写页面正文后,无法发送HTTP标头(例如Location标头)。当第一个错误发生时,它向正文写入了一条错误消息,当您尝试发送标头以重定向用户时,会导致另一个错误。这应该消失,你已经修复了你的第一个错误。

答案 2 :(得分:0)

这意味着您的查询失败。有多种原因,包括可能是数据库连接失败或SQL查询错误。您是否尝试过调试以确定您的查询语法是否正确?

答案 3 :(得分:-1)

您的问题是,在连接之后,您的查询可能无效。

您应该在连接后记录查询以查看是否是这种情况。您还应该在调用mysql_query之前测试mysql_fetch_assoc返回的内容。

另一方面说明:

这是您真正的生产代码吗?如果这是一个面向公众的站点,那么这是一个严重的安全漏洞,容易受到SQL注入攻击。

如果我输入您的用户名字段,该怎么办:

 1;TRUNCATE pureUser --

您的查询变为:

SELECT id,usr FROM pureUser WHERE usr=1; TRUNCATE pureUser -- AND pass=...

所以,你应该尝试过滤器php native extension:

Data filtering

此外,您应该尝试使用PDO,它更强大,更强大,可以使用数据库:

PHP Data Objects