【问题标题】:Php mysqli connection remains after call procedure调用过程后php mysqli连接仍然存在
【发布时间】:2015-11-19 22:02:44
【问题描述】:

我正在尝试使用 php 的 mysqli 扩展在 mysql 数据库中执行一些查询。

我的一个查询与字符串查询配合良好,它获取数据并关闭连接(我不确定如何)。

但是当我尝试调用存储过程而不是使用字符串查询时,它可以工作,但连接仍处于睡眠状态并且不会关闭。

第 1 部分

工作和连接关闭

public function getCities(){
    $connection = $this ->db-> connect();
    $result = $connection -> query("select * from cities");

    return $result;
}

第二部分

正在工作,但连接仍处于睡眠状态

public function getCities(){
    $connection = $this ->db-> connect();
    $result = $connection -> query("Call procGetCities()");


    $isclosed=mysqli_close($connection);
    if(!isclosed){
        echo "notclosed";
    } else {
        echo "closed";//returnin closed
    }
    return $result;
}

我发现了同样的问题,但没有答案。

【问题讨论】:

  • 回答后通读您的问题时,我不能 100% 确定您的具体问题是什么。
  • 我想知道为什么使用“从城市中选择*”关闭连接但使用存储过程时没有关闭连接。以及如何关闭它。
  • 阅读我的回答,你误用了mysqli_close的返回值
  • 如果它关闭连接它返回真对吗?在我的情况下它返回 true 但是当我从 mysqlbenchmark 检查我的数据库时,我可以看到睡眠连接。
  • 那下次描述你检查过的mysql benchmark :) 会调查一下

标签: php stored-procedures mysqli


【解决方案1】:
mysqli_close($connection);

如果 mysqli 将成功关闭连接,将返回 true。因此,您不是在检查连接是否关闭,而是在成功关闭连接。

成功时返回 TRUE,失败时返回 FALSE。

http://php.net/manual/en/mysqli.close.php


由于您在 cmets 中添加的信息。

您连接到数据库两次,但只关闭一次连接。通常,您会将连接存储在属性中并重用连接,然后在调用或脚本结束时将其关闭。所以像这样。

$connection = $this ->db-> connect();

public function getCities()
{
    $result = $connection -> query("select * from cities");

    return $result;
}

public function getCities()
{

    $result = $connection -> query("Call procGetCities()");

    return $result;
}

$isclosed=mysqli_close($connection);
if(!isclosed)
{
    echo "notclosed";
}
else
{
    echo "closed";//returnin closed
}

【讨论】:

  • ty Martin 但我需要知道为什么使用存储过程时连接没有关闭。
  • 为什么要关闭?
  • 因为我不再需要连接了。
  • 你的时间,但我想知道为什么当我使用存储过程连接时仍然处于睡眠状态。在php代码中使用像“select * ...”这样的sql命令和使用存储过程有什么区别。
  • 您的问题不在于,您打开了两个到服务器的连接,但只关闭了 1 个,因此您有 1 个处于睡眠状态。存储过程只是 sql 命令的集合而已。
猜你喜欢
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 2011-02-12
相关资源
最近更新 更多