2012-01-26 14 views
0

フィールドid、email、key、およびtimeを持つrecordというテーブルがあります。 "key"は電子メールのmd5ハッシュです。なぜSQL構文エラーが発生しますか?

:私は、「キー」、すなわちちょうど(ID、電子メール、時間)を使用して、それが正常に動作しますが、私はキーとそれを実行したとき、私は取得せずにSQLクエリを実行すると、だから私は、次のクエリ/コマンドに

$key = md5($email); 
$reg_time = time(); 

$query = "INSERT INTO record (id, email, key, time) VALUES (NULL,\"$email\", \"$key\", \"$reg_time\")"; 
result = mysql_query($query) or die(mysql_error()); 

を持っています

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 (NULL,"someemail.com", "itsmd5hash"' at line 1 

キーはちょうどそれが長さ

問題は何をすることができについてではありません確かに今のところ... VARCHAR(5000)として格納されていますか?

+0

以下の解決方法で修正されます。私はいつもこれらの引用符ですべてのテーブルとフィールドを引用しています - > 'そして、あなたは決して混乱しないでください:)。 – ale

答えて

2

KEY

`key` 

を使用するには、MySQLでreserved wordです。あなたはバッククォート(` - 通常は次の1に、キーボードの左上)に列名をラップする必要があります。

$query = "INSERT INTO record (id, email, `key`, time) VALUES (NULL,\"$email\", \"$key\", \"$reg_time\")"; 

また、あなたはハードそれらを必要としないので、あなたは、文字列をラップするために単一引用符を使用することができます読み返しエスケープシーケンス。クエリコードを書く方法は次のとおりです。

$query = "INSERT INTO `record` 
      (`id`, `email`, `key`, `time`) 
      VALUES 
      (NULL, '$email', '$key', '$reg_time')"; 
4

KEYは予約語です。それを使用するには、その列名を引用する必要があります。だから、

、代わりに

key 
0

キーはmysqlの予約語です。

使用key代わりのキー

0

私はそれが回答されている知っているが、キーは、MySQLの予約語です。 Googleのmysql予約語をお願いします。私は生年月日のように頭字語をつくる傾向がありますが、ほとんどの人は日付を使用しますが、日付は予約されているためDoBを使用します。

バックティックでカプセル化されている場合でも使用できますが、予約されていることを忘れてしまった場合の不満のために予約語を明確にすることをお勧めします。

また、md5ハッシュタグは何かの32文字のハッシュであるため、私は常にLOLの場合に(33)を使用しますが、あなたのvarcharはvarchar(32)より高い必要はありません。私はかなりvarchar自体が切り詰めたが、私は100%確実ではないと確信しています。また、md5($ variable)の代わりにsha1($ variable)を使用してください。より高度なハッシュシーケンスで、長さは40文字です。 Sha2()も存在し、sha3()は2012年に最大512ビットのハッシュを解放する予定です。

関連する問題