簡體   English   中英

如何調試SQLSTATE [HY000]:常規錯誤:2031在准備好的語句中

[英]How to debug SQLSTATE[HY000]: General error: 2031 in prepared statements

我有這個准備好的語句查詢

$stmt = $conn->prepare("
        UPDATE language 
        SET lang_alias=:lang_alias , lang_name=:lang_name  
        WHERE lang_id=:lang_id"
);

如果我設置一個數組來綁定值

$query_array = array ( ":lang_alias" => "en", ":lang_name" => "English (UK)", ":lang_id" => 1 ) ;

然后執行

$stmt->execute(array($query_array));

它不會工作,我明白了

注意:數組到字符串的轉換referring to $ stmt-> execute(array($ query_array));

Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number'引用同一行。

然后我嘗試使用bindParam綁定值

$stmt->bindParam(':lang_alias', $a);
$stmt->bindParam(':lang_name', $c);
$stmt->bindParam(':lang_id', $d3, PDO::PARAM_INT);

並且工作正常

如果我嘗試其他的bindParam語法

$stmt->bindParam("sssiii", $a, $b, $c, $d1, $d2, $d3);

它不會工作。

警告:PDOStatement :: bindParam()最多期望5個參數,其中7個是referring to $ stmt-> bindParam(“ sssiii”,$ a,$ b,$ c,$ d1,$ d2,$ d3);

消息為“ SQLSTATE [HY000]”的未捕獲異常“ PDOException”:常規錯誤:2031' referring to $ stmt-> execute();

1.是否由於默認情況下已准備好的語句將所有值轉換為字符串而導致的錯誤,所以我必須手動定義int 那就是為什么bindParam可以正常工作的原因? 還是我想念的其他東西?

2.為什么bindParam("sssiii"...語法無法工作?

3.我希望此查詢動態獲取其值,因此不能手動使用bindParam 我想使用關聯數組或bindParam("sssiii"...語法。

我怎樣才能做到這一點? 謝謝

$query_array已經是一個數組,因此當您運行$stmt->execute(array($query_array))您正在制作一個多維數組。 這個:

$stmt->execute($query_array);

應該是您所需要的。

關於bind問題,您沒有使用PDO語法

您正在將mysqli語法與sssiii

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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