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

小编典典

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

连接失败

如果数据库连接失败,您可能会收到“指定的变量不是有效的MySQL-Link资源”错误,如Dan Breen所述,因为应该保存该资源的变量为null。

$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()是,默认情况下,如果您在连续调用中传递相同的参数,它将重用现有的连接,而不是创建一个新的连接(Documentation)。可以通过传递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,以获取有关这三个界面之间差异的一些详细信息。

2020-05-17

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值