警告:mysql_query():3不是有效的MySQL-Link资源

我得到这个奇怪的错误,我不知道它来自哪里:

Warning: mysql_query(): 3 is not a valid MySQL-Link resource in (...)

怎么了3? 我不明白。 有没有人自己经历过这个错误?

PHP使用资源作为特殊variables来保存到外部对象(如文件和数据库连接)的链接。 每个资源都有一个整数ID。 ( 文档 )

连接失败

如果数据库连接失败,你可能会得到一个“指定的variables不是一个有效的MySQL链接资源”的错误,因为丹Breen提到,因为应该保存资源的variables为空。

 $link = mysql_connect('localsoth','baduser','badpass'); // failed connection $result = mysql_query("SELECT 1", $link); // throws error 

由于您在错误消息中获取了特定资源ID,因此某种原因,数据库连接可能会意外closures。 你的程序仍然有一个带有资源ID的variables,但外部对象不再存在。 这可能是由于调用mysql_query之前调用了mysql_close()调用,或者导致closures连接的外部数据库错误。

 $link = mysql_connect(); mysql_close($link); // $link may still contain a resource identifier, but the external object is gone mysql_query("SELECT 1", $link); 

重用连接

mysql扩展和mysql_connect()一个问题是,默认情况下,如果你在连续的调用中传递相同的参数,它将重新使用现有的连接,而不是创build一个新的( 文档 )。 这可以通过将true传递给$new_link参数来解决。
我在一个testing系统上自己遇到了这个问题,在这个系统中,生产中两个独立的数据库的数据被合并到一个testing服务器上,并且在testingmysql_xxx()函数调用的时候,他们相互mysql_xxx()并打破了系统。

 $link1 = mysql_connect('localhost','user','pass'); // resource id 1 is given $link2 = mysql_connect('localhost','user','pass'); // resource id 1 is given again mysql_close($link2); // the connection at resource id 1 is closed mysql_query("SELECT 1", $link1); // will fail, since the connection was closed 

使用$new_link

 $link1 = mysql_connect('localhost','user','pass'); // resource id 1 is given $link2 = mysql_connect('localhost','user','pass', true); // resource id 2 is given mysql_close($link2); // the connection at resource id 2 is closed mysql_query("SELECT 1", $link1); // the connection at resource id 1 is still open 

编辑:
另外,如果可能,我build议使用MySQLi扩展或PDO 。 MySQL扩展已经很老了,不能利用MySQL版本4.1.3以上的任何function。 查看http://www.php.net/manual/en/mysqli.overview.php了解这三个接口之间差异的一些细节。;

我也有这个问题。 在检查我的代码时,我发现我有一个closures连接的脚本,所以当php试图closures它,我们得到了错误。

要解决这个问题,只要在试图closures它之前检查连接是否打开:

代替:

 mysql_close($con); 

做这个:

 if( gettype($con) == "resource") { mysql_close($con); } 

我刚才有这个错误,那是因为我包含了一个我的数据库连接文件,在底部有一个紧密的连接函数。 摆脱你的密切联系,你会好起来的!

这听起来像你可能会在尝试连接到数据库时出错,而且mysql句柄实际上并不是一个有效的连接。 如果你发布更多的代码,比如你如何连接数据库,那会更有帮助。 确保你也在检查错误。