gpt4 book ai didi

php - 动态准备语句,PHP

转载 作者:行者123 更新时间:2023-11-30 22:44:00 24 4
gpt4 key购买 nike

我检查了几乎所有产生相同错误的问题,但所有这些问题都以某种错误的方式绑定(bind)了参数。也许而且很可能我也错误地绑定(bind)了参数,尽管我的情况有所不同,因为我有动态查询。

我正在根据完美创建的输入动态创建查询。但问题来自 foreach 循环中的 $stmt->bind_param 语句。这是我的错误代码片段:

$query = "UPDATE users SET";
foreach($updationFields as $field => $value){
if($value != "-"){
$query = $query. " " . $field . " = :".$field.",";
}
}
$query = rtrim($query, ",");
$query = $query . " WHERE UserId = :UserId";

$stmt = $this->conn->prepare($query);
foreach($updationFields as $field => $value){
echo $field;
if($value != "-"){
$input = ":".$field;
$stmt->bind_param($input, $value); // This line produces error
}
}
$stmt->bind_param(":UserId", $userId);

$stmt->execute();

这是为一个字段生成的动态“字符串查询”:

UPDATE users SET fullName = :fullName WHERE UserId = :UserId

错误说: fatal error :调用非对象上的成员函数 bind_param()

知道我做错了什么吗?

最佳答案

正如@Fred-ii- 和@commorrissey 所指出的,:Placeholder 是由 PDO 而不是 mysqli 支持的,所以我不得不:

  1. :Placeholders 替换为 ?
  2. 使用 call_user_func_array 调用 bind_param,按照 mysqli_stmt 的预期提供动态引用。

下面是创建动态绑定(bind)的代码:

            $params = array();//
$params[] = $type;
$i=0;
foreach($updationFields as $field => $value){
if($value != "-"){
$bind_name = 'bind' . $i;
$$bind_name = $value;
$params[] = &$$bind_name;
$i++;
}
}
$bind_name = 'bind' . $i;
$$bind_name = $userId;
$params[] = &$$bind_name;

$return = call_user_func_array(array($stmt,'bind_param'), $params);

关于php - 动态准备语句,PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30199379/

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