2010-08-25 46 views
0

我最近重建我的网站,现在我得到这个错误:mysql_result()错误发生,一下子

警告:mysql_result():提供的参数不是在/ home/XX有效的MySQL结果资源/public_html/asdf.com/comsel.php on line 28

警告: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():提供的参数不是在/home/xx/public_html/asdf.com/comsel.php一个有效的MySQL结果资源上线31

那些线如下:

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。

+0

你能告诉我们你运行的PHP和MySQL的版本吗?这些升级是否完成?此外,实际的违规代码可能会更高。您可以在开始MySQL连接时给我们打印吗? – CogitoErgoSum 2010-08-25 18:52:05

+1

你可能不想让你的MySQL登录信息在这里明文... – 2010-08-25 19:03:58

+1

请为上帝的爱立即拿出你的实际PW信息,并改变你的生产数据库,丹尼尔和马克指出! – CogitoErgoSum 2010-08-25 19:05:37

回答

1

尝试RAND后除去空间:

$查询=“SELECT * FROM foxlose ORDER BY RAND()LIMIT 1;

+0

这就是它!非常感谢。现在回顾一下,我在前一版本中使用了一种不同的方法来选择随机条目。我只是认为这是一个不需要提及的语义问题。我必须在我的电脑上运行不同版本的MySQL,而不是我的虚拟主机所具有的版本。 – John 2010-08-25 19:07:02

+3

请注意,在生产服务器上,您可能想重新考虑使用RAND(),因为它可能是一项昂贵的操作。有没有优雅的解决方案,但它可能更有效(但并不容易)获得行计数和随机与1和行数之间的PHP和LIMIT $兰特,1比使用mySQLs兰德 – CogitoErgoSum 2010-08-25 19:10:36

5

在我看来奇怪,你附近与数据库的连接:

mysql_close(); 

然后使用

$variable = mysql_result(...); 

一般来说,如果你想知道错误使用的原因功能mysql_error

+0

MartyIX是正确的,在底部添加mysql_close()后,所有查询 – Christophe 2010-08-25 18:52:59

+1

不同意。 MySQL关闭只是关闭连接。他的结果已经存储在一个变量中。 mysql_result决不依赖于mysql_close。理想情况下,他应该使用mysql_fetch_array或fetch_assoc来获得性能,但无论哪种方式,它都不应该寻找一个打开的连接来解析变量集 – CogitoErgoSum 2010-08-25 18:55:31

+0

php脚本正在尝试查找数据库引用 - 这就是mysql和php的工作原理。当你关闭引用时,你仍然在处理这个函数,但它不是一个有效的资源,因为它找不到引用。我不太确定mysql_close()甚至是必要的。我只能认为如果你访问多个数据库,你会使用它。 – 2010-08-25 18:56:58

0

有几件事情,你可以在这里做

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

ie

mysql_query($query, $connction); 
  • 此外,托马斯Clayson指出的那样,确保您得到的结果。如果没有结果,mysql_result会抛出一个错误

  • 确保mysql_select_db(假设你正在使用它)正在连接到数据库。

  • 根据版本和这样你可能需要一个分号关闭你的MySQL声明

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

    这在很大程度上已经从其他人有类似问题而采取的。完整的信用(和更多的想法)在这里:http://www.daniweb.com/forums/thread26425.html