[英]Dynamic prepared statement, PHP
我檢查了幾乎所有產生相同錯誤的問題,但所有這些問題都以某種錯誤的方式綁定了參數。 也許而且很可能我也是錯誤地綁定了參數,盡管我的情況有所不同,因為我有動態查詢。
我正在從完美創建的輸入動態創建查詢。 但是問題來自於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
錯誤信息: 致命錯誤:在非對象中調用成員函數bind_param()
知道我在做什么錯嗎?
正如@ Fred-ii-和@commorrissey所指出的那樣:Placeholder
PDO而不是mysqli支持:Placeholder
,所以我不得不:
?
:Placeholders
替換為?
bind_param
並用call_user_func_array
提供mysqli_stmt期望的動態引用。 這是創建動態綁定的代碼:
$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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.