警告:mysql_query(): 3 不是有效的 MySQL 链接资源
我得到了这个奇怪的错误,我无法弄清楚它来自哪里:
Warning: mysql_query(): 3 is not a valid MySQL-Link resource in (...)
这3个是怎么回事?我不明白。有没有人自己经历过这个错误?
我得到了这个奇怪的错误,我无法弄清楚它来自哪里:
Warning: mysql_query(): 3 is not a valid MySQL-Link resource in (...)
这3个是怎么回事?我不明白。有没有人自己经历过这个错误?
PHP 使用资源作为特殊变量来保存指向外部对象(如文件和数据库连接)的链接。每个资源都有一个整数 ID。(文档)
如果数据库连接失败,您可能会收到“指定的变量不是有效的MySQL-Link资源”错误,正如Dan Breen所提到的,因为应该保存资源的变量为空。
$link = mysql_connect('localsoth','baduser','badpass'); // failed connection
$result = mysql_query("SELECT 1", $link); // throws error
由于您在错误消息中获取了特定的资源 ID,因此数据库连接可能由于某种原因意外关闭。程序中仍有一个具有资源 ID 的变量,但外部对象不再存在。这可能是由于在调用 之前的某个位置调用 ,或者是关闭连接的外部数据库错误。mysql_close()
mysql_query
$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()
true
$new_link
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
编辑:
顺便说一句,如果可能的话,我建议使用MySQLi扩展或PDO。MySQL扩展已经很老了,无法利用MySQL版本4.1.3之前的任何功能。有关三个接口之间差异的一些详细信息,请查看 http://www.php.net/manual/en/mysqli.overview.php。
我也有这个问题。在检查我的代码时,我发现我包含了一个关闭连接的脚本,所以当php再次尝试关闭它时,我们得到了错误。
要解决此问题,只需在尝试关闭连接之前检查连接是否打开:
而不是:
mysql_close($con);
请执行下列操作:
if( gettype($con) == "resource") {
mysql_close($con);
}