MySQL更新语法错误


MySQL Update Syntax Error

我用php做了一个简单的查询来更新我的表,但无法找出错误。

我的功能:

function editData($id, $data) {
    $message ="";
    $query= "UPDATE blood_data SET name='{$data['name']}', group='{$data['group']}',
             address1='{$data['address']}', district='{$data['district']}',
             age='{$data['age']}', sex='{$data['sex']}', phone='{$data['phone']}', 
             mobile='{$data['mobile']}',  email='{$data['email']}' 
             WHERE id='{$id}' ";
    if(mysql_query($query)) {
        $message ="Data Successfully Updated ";
    }else {
        die("failed: " . mysql_error());    
    }
    return $message;
}

这就是传入函数:

$dataArray = [
    'name'=>$_POST['full_name'],
    'group'=>$_POST['group'],
    'sex'=>$_POST['sex'],
    'age'=>$_POST['age'],
    'address'=>$_POST['address'],
    'district'=>$_POST['district'],
    'email'=>$_POST['email'],
    'phone'=>$_POST['phone'],
    'mobile'=>$_POST['mobile']
  ];
  $msg = editData($idUploader, $dataArray);

抛出的错误消息是:

失败:您的SQL语法有错误;在第1行的'group='O+',address1='dsd',district='dfs',age='22',sex='male',phone='23423'附近,查看与MySQL服务器版本相对应的手册以获得正确的语法

您需要引用字段名称,因为group是一个保留的MySQL关键字。例如:

UPDATE blood_data SET `name` = '{$data['name']}', `group` = '{$data['group']}' ...

考虑使用PDO,因为它将为您做这件事,并有助于预防SQL注入,以及许多其他好处。更不用说mysql_*函数已被弃用。

您应该避免此类代码,因为您的程序容易受到SQL注入攻击。请考虑使用带有prepared语句的mysqli。

正如Matt Humphrey在他的回答中已经提到的那样,group是保留的mysql关键字,但当您在如下的backticks中披露它时,您可以使用它:

`group`