簡體   English   中英

SQLSTATE [42000]:語法錯誤或訪問沖突:更新時為1064

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

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