首页 > 解决方案 > 在准备语句中调用 connect 作为函数时出错

问题描述

编辑。我的错误仅在调用数据库连接作为函数时发生,如果我正常调用我的数据库连接,则不会发生错误。

我正在尝试使用数据库连接作为函数执行准备语句,以便可以在其他函数中重用它。使用数据库连接功能时执行正常的 SQL 代码可以工作,但是当我尝试在准备语句中使用时出现错误。

这是我的代码。

function connect(){
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "test";
    $conn = new mysqli($servername, $username, $password, $dbname);
    return $conn;
}

if (connect()->connect_error) {
    die("Connection failed: " . connect()->connect_error);
} else {
    echo "GOOD";
}

$val = "1";
$stmt = connect()->prepare("SELECT * FROM countries WHERE id = ?");
$stmt->bind_param("s",$val);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    echo $row['name'];
}
$stmt->close();

当将数据库作为普通变量连接时,这样的工作。

$stmt = $conn->prepare("SELECT * FROM countries WHERE id = ?");

但是,每当我尝试将我的连接作为函数调用时,我都会收到“调用 bool 上的成员函数 fetch_assoc()”。我对这段代码做错了什么?

标签: php

解决方案


在搜索了一段时间并基于这个答案之后,我能够通过声明一个连接变量来解决我的问题。但是,这并不能解释为什么直接调用 connect 不起作用。有人可以向我解释为什么第一种方法不起作用吗?

$db = connect();
$stmt = $db->prepare("SELECT * FROM countries WHERE id = ?");

推荐阅读