[英]Why am I receiving a bind parameter issue?
這是錯誤:
警告:mysqli_stmt_bind_param():類型定義字符串中的元素數與綁定變量數不匹配
讓我向您展示一段代碼,然后是輸出。
if (!empty($par_val))
{
echo "$sql_update<br>";
// append par_type with 2 integers for $req_setstatus and $req_activator.
$par_type .= 'ii';
echo "$par_type<br>";
// append par_val with $req_setstatus and $req_activator
$par_val .= "$req_setstatus,$req_activator";
echo "$par_val";
mysqli_stmt_bind_param($stmt,$par_type,$par_val);
}
這里是輸出:
更新請求 SET 優先級 = ?,狀態 = ?, 激活器 = ? WHERE id = 35 --> 這是更新語句,要更新的 3 個字段。
sii --> 這是 $par_type,有 3 個值。
Urgent,2,6 -->這是$par_val,有3個值。
為什么我會收到此錯誤。
我在想,這可能是將多個值綁定到 1 個單個變量中,但如果這是問題所在,那么我將如何設置它以在每次運行時采用一組動態變量。 有時輸入可以是 3,有時是 8。
如果您需要動態數量的參數,您可以使用$par_val
作為數組。 所以...
$par_val = [2,6];
然后使用數組解包運算符 ( ...
)...
mysqli_stmt_bind_param($stmt, $par_type, ...$par_val);
您可以將$par_val
作為 csv 並使用$par_val
explode()
將其放入數組中,然后將其解壓縮如上...
$par_val = explode(",", "2,6);
我建議使用 OOP 樣式,它更易於閱讀,並且在綁定未知數量的參數時也使用字符串類型 ( s
)。 您真的不需要區分整數,並且在動態綁定時,大多數情況下您綁定為字符串還是整數都沒有區別。
首先使用您的參數構建和排列。
$params = [$req_setstatus, $req_activator, $whateverIsYour3rdParam];
然后重復 type s
正確的次數。
$types = str_repeat('s', count($params));
然后綁定。 您可以在數組之前使用 splat 運算符(參數解包) ...
將數組解包為其組成部分。
$stmt->bind_param($types, ...$params);
作為最終建議,我建議使用 PDO,它更易於使用。 最好開始使用一個好的抽象庫,例如 EasyDB。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.