gpt4 book ai didi

php - 将数组绑定(bind)到准备好的语句的正确方法?

转载 作者:行者123 更新时间:2023-11-30 23:18:19 24 4
gpt4 key购买 nike

这可能已经被问过几次了,但我很难理解如何将数组绑定(bind)到 mysqli 准备好的语句。

我想做的是在消息线程中查询用户 ID 列表,然后插入到消息表中,以便用户可以收到新消息回复的通知。

这是我试过的:

//now check which users are in the message thread
$stmt2 = $mysqli->prepare("SELECT DISTINCT user_id_2
FROM uc_user_messages
WHERE thread_id = ?");
$stmt2->bind_param("i", $this->thread_id_clean);
$stmt2->bind_result($user_2_id);
$stmt2->execute();

$stmt3 = $mysqli->prepare("
INSERT INTO `users`.`uc_user_messages`(
`id` ,
`message_id` ,
`user_id_2` ,
`read` ,
`thread_id`
)
VALUES (
NULL , ?, ?, ?, ?
);
");

//now insert the message into the user_messages table so the user can be notified of a new message
while ($row = $stmt2->fetch()){
$stmt3->bind_param("iiii", $inserted_id, $user_2_id, $read, $this->thread_id_clean );
$stmt3->execute();
}

我做错了什么?我也尝试将准备好的语句放入循环中,但我一直收到此错误:

Fatal error: Call to a member function bind_param() on a non-object

我还使用测试数据手动运行了查询,所以我知道是循环导致了值无法正确绑定(bind)。

编辑:我应该补充一点,选择查询工作正常,是插入查询导致了错误。

最佳答案

Fatal error: Call to a member function bind_param() on a non-object

这意味着 $stmt2 或 $stmt3 不是对象。如果在解析或验证查询时出现任何问题,prepare() 函数将返回 false。但是 false->bind_param() 是行不通的。

这是许多 MySQL 开发人员常犯的错误。解决方案是您必须检查 prepare() 是否返回成功,而不是 false

例子:

$stmt2 = $mysqli->prepare("...");
if ($stmt2 === false) {
// do something to report $mysqli->error, and return
}

另见 http://php.net/manual/en/mysqli.error.php

关于php - 将数组绑定(bind)到准备好的语句的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16596324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com