警告:mysql_query(): 3 不是有效的 MySQL 链接资源

2022-08-30 19:50:16

我得到了这个奇怪的错误,我无法弄清楚它来自哪里:

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

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


答案 1

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_linkmysql_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


答案 2

我也有这个问题。在检查我的代码时,我发现我包含了一个关闭连接的脚本,所以当php再次尝试关闭它时,我们得到了错误。

要解决此问题,只需在尝试关闭连接之前检查连接是否打开:

而不是:

mysql_close($con);

请执行下列操作:

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

推荐