[英]Why Am I getting an SQL syntax error?
我有一个名为record
的表,其中包含字段ID,电子邮件,键和时间。 “密钥”是电子邮件的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,email,time),它运行良好,但是当我使用键运行它时,我得到:
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)...现在只是为了确保它与长度无关
可能是什么问题?
KEY是保留字。 您需要引用该列名才能使用它。
所以用
`key`
代替
key
KEY
是MySQL中的保留字 。 您需要将列名称包装在反引号中( `
-通常在键盘的左上角,旁边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')";
键是mysql中的保留字。
使用
代替密钥 key
我知道它已经被回答了,但是键是mysql中的保留字。 请google mysql保留字。 我倾向于为出生日期之类的缩写,大多数人会使用日期,但我使用DoB,因为日期是保留的。
如果将它们封装在反引号中,它们仍然可以使用,但是我建议您避免保留字,因为如果您忘记保留字,可能会造成挫败感。
md5哈希标签也是32位字符的哈希值,因此您的varchar不必高于varchar(32),尽管我总是使用(33)以防万一。 我很确定varchar会自行截断,但是我不确定100%。 还要使用sha1($ variable)而不是md5($ variable)。 它是一个更高级的哈希序列,长度为40个字符。 Sha2()也存在,sha3()将于2012年发布,将哈希扩展到512位。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.