2

PHP+MySQL,两次调用mysql_connect会发生什么,像这样:

$link = mysql_connect($server, $user, $pass);
$link = mysql_connect($server, $user, $pass);

PHP 似乎没有产生任何通知。是否忽略第二行或建立新连接(如果是,是否会自动关闭前一个连接)?

我知道,这些情况一开始就不应该发生。

4

2 回答 2

3

我知道这是一个老问题,但我自己也想知道同样的事情。所以我做了一个测试,看看php是否真的会忽略一个连接,或者打开一个新连接(这很糟糕,因为它可能会给数据库带来一些额外的负载)。

<?
$test1 = mysqli_connect("127.0.0.1","root","pass","test_db");
$test2 = mysqli_connect("127.0.0.1","root","pass","test_db");
print "<pre>";
print_r($test1);
print_r($test2);
print "</pre>";
?>

以上将输出一个[thread_id]。通过比较这两个 id,我发现它们并不相似,因此我必须假设现在有 2 个连接是打开的。

于 2015-09-14T13:28:35.070 回答
0

我也在寻找答案。Tnx to ComFreek 我必须解决我的问题。我正面临错误

mysql err 2014:命令不同步;你现在不能运行这个命令

这是因为在连接中获取另一个查询的过程中执行了新查询。然后我想知道 mysqli_connect 是否总是返回一个新连接,或者如果存在则返回一个打开的连接。关于参数'new_link',已弃用的“mysql_connect”的文档说(http://php.net/manual/en/function.mysql-connect.php):

新链接

如果使用相同的参数对 mysql_connect() 进行第二次调用,则不会建立新链接,而是返回已打开链接的链接标识符。new_link 参数修改了这种行为并使 mysql_connect() 始终打开一个新链接,即使之前使用相同的参数调用了 mysql_connect() 也是如此。在 SQL 安全模式下,此参数被忽略。

但是较新的类“mysqli::__construct”的文档说(http://php.net/manual/en/mysqli.construct.php):

打开与 MySQL 服务器的连接。

这意味着它总是返回一个新连接,所以我检查了它并使用新连接进行了新查询(中间的那个)并且它已修复。

于 2018-09-12T15:36:45.120 回答