我有一个名为record
的表格,其中包含字段ID,电子邮件,密钥和时间。 “key”是电子邮件的md5哈希值。所以我有以下查询/命令
$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 :(得分:4)
KEY是一个保留字。您需要引用该列名称才能使用它。
所以,使用
`key`
而不是
key
答案 1 :(得分: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')";
答案 2 :(得分:0)
Key是mysql中的保留字。
使用
代替密钥key
答案 3 :(得分:0)
我知道它已被回答但是密钥是mysql中的保留字。请google mysql保留字样。我倾向于为出生日期等事情制作首字母缩略词,大多数人会使用日期,但我使用DoB,因为日期是保留的。
如果封装在反引号中,它们仍然可以被使用但是我建议不要使用保留字,因为如果忘记保留它可能会导致挫败感。
另外一个md5哈希标签是一个32字符的哈希值,因此你的varchar不能高于varchar(32),尽管我总是使用(33)以防万一。我很确定varchar会截断自己,但我不是100%肯定。也可以使用sha1($ variable)代替md5($ variable)。它是一个更高级的哈希序列,长度为40个字符。 Sha2()也存在,sha3()将在2012年发布,扩展哈希值达到512位。