【问题标题】:mysql_result() error happening all of a suddenmysql_result() 错误突然发生
【发布时间】:2010-08-25 18:49:16
【问题描述】:

我最近重建了我的网站,现在我收到了这个错误:

警告:mysql_result():提供的参数不是第 28 行 /home/xx/public_html/asdf.com/comsel.php 中的有效 MySQL 结果资源

警告:mysql_result():提供的参数不是第 29 行 /home/xx/public_html/asdf.com/comsel.php 中的有效 MySQL 结果资源

警告:mysql_result():提供的参数不是第 30 行 /home/xx/public_html/asdf.com/comsel.php 中的有效 MySQL 结果资源

警告:mysql_result():提供的参数不是第 31 行 /home/xx/public_html/asdf.com/comsel.php 中的有效 MySQL 结果资源

这些行如下:

mysql_connect($dbhost,$dbuser,$dbpass)
or die("Error: Failed to connect to database");

mysql_select_db($dbname)
or die("Error: Failed to select databse");

$query = "SELECT * FROM foxlose ORDER BY RAND ( ) LIMIT 1";

$result = mysql_query($query);



$title = mysql_result($result,$i,"title");
$link = mysql_result($result,$i,"link");
$nomen = mysql_result($result,$i,"name");
$text = mysql_result($result,$i,"text");


mysql_close();

mysql_close() 之前的最后四行;是第 28-31 行。

唯一的问题是:这些行在我的网站的旧版本中是相同的,并且它们有效。我无法弄清楚发生了什么变化。当我将计算机用作服务器并在本地托管时,该代码也可以正常工作。

知道这个错误想告诉我什么吗?

编辑:在文档中添加了所有的mysql。

【问题讨论】:

  • 您能告诉我们您正在运行的 PHP 和 MySQL 的版本吗?是否对这些进行了任何升级?此外,实际的违规代码可能更高。您能否给我们打印一下您开始 MySQL 连接时的情况?
  • 您可能不想在此处以明文形式显示您的 MySQL 登录信息...
  • 看在上帝的份上,请立即取出您的实际 PW 信息,并按照 Daniel 和 Mark 的说明在您的生产数据库中进行更改!
  • 谢谢 我不知道我在想什么
  • @John 很遗憾,因为您需要花费一些时间进行编辑,因此对于查看此问题的编辑历史记录的任何人,该信息都将保留。您可能应该更改您的登录信息以防万一。

标签: php mysql


【解决方案1】:

在我看来,您通过以下方式关闭与数据库的连接很奇怪:

mysql_close();

然后你使用

$variable = mysql_result(...);

一般来说,如果您想知道错误原因,请使用函数mysql_error

【讨论】:

  • MartyIX 是对的,在所有查询之后添加底部的 mysql_close()
  • 不同意。 MySQL Close 只是关闭连接。他的结果已经存储在一个变量中。 mysql_result 绝不依赖于 mysql_close。理想情况下,他应该使用 mysql_fetch_array 或 fetch_assoc 来提高性能,但无论哪种方式,它都不应该寻找打开的连接来解析变量集
  • php 脚本正在尝试查找数据库引用——这就是 mysql 和 php 的工作方式。当您关闭引用时,您仍在处理该函数,但它不是有效资源,因为它找不到引用。我不确定 mysql_close() 是否必要。我只能认为,如果您访问多个数据库,您会使用它。
  • mysql_close() 仍然出现同样的错误;在所有 mysql 查询之后
  • 同意 CogitoErgoSum - 你应该使用 mysql_fetch_array() 而不是 mysql_result()。 mysql_result 很丑主要是因为如果查询没有返回行,它会抛出错误。
【解决方案2】:

尝试删除 RAND 后的空格:

$query = "SELECT * FROM foxlose ORDER BY RAND() LIMIT 1;

【讨论】:

  • 就是这样!太感谢了。现在回想起来,我在以前的版本中使用了另一种选择随机条目的方法;我只是认为这是一个不需要提及的语义问题。我必须在我的计算机上运行与我的虚拟主机不同版本的 mysql。
  • 请注意,在生产服务器上,您可能需要重新考虑使用 RAND(),因为它可能是一项昂贵的操作。没有优雅的解决方案,但获取行数并使用 PHP 在 1 和行数之间随机化并执行 LIMIT $rand, 1 可能比使用 mySQLs RAND 更有效(尽管并不容易)
【解决方案3】:

您可以在这里做几件事。

  1. 检查mysql_query 连接是否实际设置。或者,您可以通过将连接传递给 mysql 查询来确保正在传递连接

mysql_query($query, $connction);
  1. 此外,Thomas Clayson 指出,确保您获得结果。如果没有结果 mysql_result 会抛出错误

  2. 确保 mysql_select_db(假设您正在使用它)正确连接到数据库。

  3. 取决于版本等,您可能需要一个分号来关闭您的 mysql 语句

$query = "SELECT * FROM foxlose ORDER BY RAND () LIMIT 1;";

其中大部分内容来自其他有类似问题的人。完整的信用(和更多的想法)在这里:http://www.daniweb.com/forums/thread26425.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2019-10-29
    • 2021-12-23
    相关资源
    最近更新 更多