关闭语句后mysqli + xdebug断点导致许多警告

Abc*_*hen 23 php mysqli xdebug

我有一段这样的代码:

$conn = new mysqli($host, $username, $passwd, $dbname);

...

$stmt = $conn->prepare('SELECT ...');
$stmt->bind_param(...);
$stmt->execute();
$stmt->bind_result(...);
while($stmt->fetch())
{
    // do something here
}
$stmt->close();

...

// do something more here that has absolutely nothing to do with $stmt
Run Code Online (Sandbox Code Playgroud)

这完全没问题.我得到了我期望的结果,没有错误或任何不应该发生的事情.

但是,如果我设置一个断点(Xdebug 2.2.5/2.2.6/2.2.8/2.3.2和PHP 5.5.3/5.5.15/5.6.0/5.6.6/5.6.10)之后 的一行$stmt->close();,我得到很多警告

不允许财产访问

要么

无法获取mysqli_stmt

我以为我错过了关闭另一个mysqli声明,但我得到了所有结果.在我的代码中似乎没有问题......

有没有办法摆脱这个错误的警告?

更新:此问题仍存在于PHP 7.0.1/Xdebug 2.4.0 RC3中.

Abc*_*hen 21

报告了一些类似的问题
http://bugs.xdebug.org/view.php?id=900
https://bugs.php.net/bug.php?id=60778

摆脱这些消息的一种方法是添加

unset($stmt);
Run Code Online (Sandbox Code Playgroud)

在关闭语句之后和断点之前.如果这没有帮助,您还应该添加

unset($connection);
Run Code Online (Sandbox Code Playgroud)

关闭@Martin在评论中提到的连接后.

这并没有解决问题本身,但让你继续你的工作,直到可以修复一段时间.

编辑:现在还有一个报道的问题 :)

编辑:这似乎是一个错误在库MySQLi司机报道在这里.

编辑:如果您使用PDO,似乎不会出现此错误.所以这可能是切换到PDO的另一个原因.

  • 这个bug正在困扰着我.我更像是一名C++程序员,当我在2015年用PHP遇到这样的问题时,我觉得PHP是一种玩具语言. (3认同)
  • 在关闭连接后也未设置($ conn)! (3认同)