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