我有這個準備好的語句查詢如何調試SQLSTATE [HY000]:常規錯誤:2031在事先準備好的發言
$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));
它不會工作,我得到
Notice: Array to string conversion
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);
它不會工作。給
Warning: PDOStatement::bindParam() expects at most 5 parameters, 7 given
referring to
$stmt->bindParam("sssiii", $a, $b, $c, $d1, $d2, $d3);
和
Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2031 '
referring to
$stmt->execute();
是由一個事實,即在默認情況下編寫的語句轉換爲字符串的所有值,所以我必須要定義int
用手錯誤?這就是爲什麼bindParam
工作正常?還是我失蹤的其他東西?
2.爲什麼bindParam("sssiii"...
sytntax不會工作?
3.我希望此查詢動態獲取其值,因此手動使用bindParam
不是一個選項。我想使用關聯數組或bindParam("sssiii"...
語法。
我該怎麼做?謝謝
@ Fred-ii-完成。還是一樣的錯誤。這是一個錯誤,而不是在我的代碼中。 – slevin
@slevin如果Chris的評論解決了它,也許可以邀請他將它作爲答案發布,然後再有人從他腳下拉下地毯;-) –
@ chris85是的,就是這樣,謝謝指出。 'bindParam(「sssiii」...'語法的問題仍然存在,我看不出來怎麼回事 – slevin