簡體   English   中英

為什么我會收到綁定參數問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM