1

mySQL から次のエラー メッセージが表示されます。

You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near 'key,time) 
VALUES ('FreeTest','86400')' at line 2

コードは次のとおりです。

if ((isset($_POST['key'])) && (isset($_POST['days']))) {

  $key = mysql_escape_string($_POST['key']);
  $days = mysql_escape_string($_POST['days'] * 86400);

  $add = "INSERT INTO licence
  (key,time)
  VALUES
  ('$key','$days')";

  $addkey = mysql_query($add);
}
4

1 に答える 1

6

KEY名の 1 つである という名前の列は、たまたま予約済みのキーワードです。構文エラーが発生しないようにバッククォートでエスケープする必要があります。これも予約済みのキーワードですTIMEが、mysql ではバッククォートなしで使用できます。

INSERT INTO licence (`key`,time) VALUES ('$key','$days')

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-03-28T12:50:02.777 に答える