0

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 構文にエラーがあります。near 'group='O +', address1='dsd', district='sdfs', age='22', sex='male', phone を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 ='23423' 行 1

4

2 に答える 2

7

group予約済みの MySQL キーワードと同様に、フィールド名を引用符で囲む必要があります。例えば:

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

他の多くの利点の中でも、 PDOを使用すると、SQL インジェクションの防止に役立ちます。mysql_*関数が非推奨であることは言うまでもありません。

于 2012-09-05T08:13:39.023 に答える
0

このようなコードは避ける必要があります。プログラムは SQL インジェクション攻撃に対して脆弱です。代わりに、プリペアド ステートメントで mysqli を使用することを検討してください。

Matt Humphreyが彼の回答で既に述べたように、group は mysql の予約済みキーワードですが、次のようにバッククォートで開示するときに使用できます。

`group`
于 2012-09-05T08:18:27.587 に答える