php - 在准备语句中调用 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()”。我对这段代码做错了什么?
解决方案
在搜索了一段时间并基于这个答案之后,我能够通过声明一个连接变量来解决我的问题。但是,这并不能解释为什么直接调用 connect 不起作用。有人可以向我解释为什么第一种方法不起作用吗?
$db = connect();
$stmt = $db->prepare("SELECT * FROM countries WHERE id = ?");
推荐阅读
- amazon-web-services - S3 存储桶策略允许 S3 访问 AWS 控制台中当前经过身份验证的用户?
- typescript - Pulumi 根据选择的栈修改 kubernetes 资源
- oracle - 我们可以在 OBIEE 中创建带有时间线的动态信息图表吗?
- java - 实现DnD时如何让jtable transferhandler高亮一行?
- azure - 在 Azure Function App 中使用 SignalR 并在门户上发布
- r - 有什么方法可以保护我的 R 源代码吗?
- rest - REST 实体版本
- python - 从一列pandas python中的字符串切片创建新列
- node.js - DynamoDB:无法更新节点 js 中的 dynamoDB 项
- java - 将字符串分成 3 部分并在 JAVA 中导出为 CSV