2012-01-26 48 views
0

我有一個名爲record的表,其中包含字段ID,電子郵件,密鑰和時間。 「key」是電子郵件的md5散列。所以,我有以下查詢/命令爲什麼我會收到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()); 

當我運行沒有SQL查詢「重點」,即只使用(ID,電子郵件,時間),它工作正常,但是當我用鑰匙運行它,我得到:

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是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` 

,而不是

key 
0

鍵是MySQL中的保留字。

使用key不是關鍵

0

我知道這已經回答了,但關鍵是在MySQL的保留字。請google mysql保留字。我傾向於爲出生日期等事物製作首字母縮略詞,大多數人會使用日期,但我使用DoB,因爲日期是保留的。

如果封裝在反引號中,它們仍然可以使用,但是我建議您避免使用保留字,因爲它可能會導致應該忘記它的保留。

此外,md5哈希標記是32個字符的哈希值,因此您的varchar不必高於varchar(32),儘管我總是使用(33)以防萬一lol。我很確定varchar截斷了自己,但我不是100%確定的。也使用sha1($變量)而不是md5($變量)。它是一個更高級的哈希序列,長度爲40個字符。 Sha2()也存在,sha3()將在2012年發佈,將散列擴展到512位。