[英]SQLSTATE[42000]: Syntax error or access violation: 1064 on update
我有此功能,如果我只有一個參數,它可以正常工作。 但是,如果我有多個錯誤,則會出現上述錯誤。
version for the right syntax to use near 'usr_lastname','usr_login'='firstname','lastname' at line 1 in
public function updateById($id, $data)
{
#print_r($data);
foreach ($data as $field => $value){
$fields[] = '`'.$field.'`';
$targets[] = ':'.$field;
$values[] = $value;
}
$stmt = $this->db->prepare("UPDATE ".$this->table." SET ".join(',', $fields)."=".join(',', $targets)." WHERE id = $id");
foreach ($targets as $pos => $target){
switch (true){
case is_int($values[$pos]) : $type = PDO::PARAM_INT; break;
case is_bool($values[$pos]) : $type = PDO::PARAM_BOOL; break;
case is_string($values[$pos]) : $type = PDO::PARAM_STR; break;
case is_null($values[$pos]) : $type = PDO::PARAM_NULL; break;
default : $type = PDO::PARAM_STR; break;
}
$stmt->bindValue($target, $values[$pos], $type);
print_r($stmt);
}
$stmt->execute();
$json = array(
'success' => true,
'result' => $value
);
echo json_encode($json);
}
我沒有看到任何“,”錯誤。
有什么建議我會出錯或遺漏嗎?
謝謝你的幫助。
您的問題在這里:
SET ".join(',', $fields)."=".join(',', $targets)."
UPDATE的語法如下:
col1 = :col1, col2 = :col2, col3 = :col3 ...
現在,您的代碼是這樣的:
col1,col2,col3 = :col1, :col2, :col3
因此,如果只有1個參數,則可以正常使用(col1 =:col1)
最簡單的解決方案是更改您准備$fields
和$targets
,例如:
foreach ($data as $field){
$updateFields[] = '`'.$field.'` = '.':'.$field
}
然后您的SQL應該是這樣的:
"UPDATE ".$this->table." SET ".join(',', $updateFields)." WHERE id = $id"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.