使用预备语句时关闭连接的问题[重复]。

问题描述 投票:0回答:1

我正在将一些代码转换为使用准备好的语句,就像在使用 mysqli. 当我试图关闭连接时,问题就来了($con). 无论我怎么尝试,如果我先关闭准备好的语句,我都会得到一个错误($sql).

错误是。

发生异常,警告 AdminDb::test(): 无法获取mysqli_stmt.

我的猜测是 $sql_>close() 也正在关闭连接,因为所有的 $con的属性在语句关闭后变成了null。但我到处都能看到关闭语句,然后关闭连接的示例代码。我试过在 try 块,预先声明 $con$sql,等等,都没有用。

如果我跳过语句close,连接关闭就能正常工作。

下面是一个测试函数来演示这个问题。

public function test(): bool {

    try {
        $con = new mysqli(self::$serverName, self::$userName, self::$password, self::$dbName, self::$port);
        if ($con->connect_errno) throw new DatabaseException("Database connection failed: ($con->connect_errno) $con->connect_error");
        $sql = $con->prepare("
            SELECT `Id`
            FROM   `provider`
            WHERE  `HeaderText` = ?");
        $sql->bind_param('s', $headerText);
        $sql->execute();
        $sql->store_result();
        $sql->free_result();
        return TRUE;
    } catch (\Throwable $e) {
        throw $e;
    } finally {
        if (isset($sql)) $sql->close();
        if (isset($con)) $con->close();
    }
}
mysqli php-7.1
1个回答
0
投票

好吧,我认为这实际上是Visual Studio Code、PHP Debug、PHP Server和XDebug的某个地方出了问题,因为如果我删除所有的函数断点,一切都好。

我最终发现,因为我在一些无害的语句上看到了错误,如 return TRUE;.

诡异,但要注意的是。

更新

Visual Studio Code Debug自带一个默认的 断点 设置为 "Everything"(Debug窗格的左下角)。这似乎会抛出所有的错误和警告,而不是让你的代码处理它们。

取消勾选这个,然后重新加载,你应该就可以了。我在这上面损失了几个小时。

© www.soinside.com 2019 - 2024. All rights reserved.