我有这个功能,如果我只有一个参数,它工作正常。 但如果我有多个,我会收到上述错误。
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);
}
我没有看到任何“,”错误。
有什么建议我错了或遗失了吗?
感谢您的帮助。
答案 0 :(得分:0)
你的问题在这里:
SET ".join(',', $fields)."=".join(',', $targets)."
UPDATE的语法是这样的:
col1 = :col1, col2 = :col2, col3 = :col3 ...
现在你的代码是这样的:
col1,col2,col3 = :col1, :col2, :col3
所以如果你只有一个参数就可以正常工作(col1 =:col1)
最简单的解决方案是改变您准备$fields
和$targets
的方式,例如:
foreach ($data as $field){
$updateFields[] = '`'.$field.'` = '.':'.$field
}
你的SQL应该是这样的:
"UPDATE ".$this->table." SET ".join(',', $updateFields)." WHERE id = $id"