所以我现在已经尝试了一整天,我觉得这是一个超级简单的解决方案,我只是错过了它。试图使用此查询:
INSERT INTO codes (`user_id`, `type`, `code`, `expires`) VALUES ($id, $type, $code, $expires);
这是"到期"值:
2016-11-13T00:14:43.000Z
查询产生的错误:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':14:43.000Z)' at line 1
这是数据库结构:
CREATE TABLE IF NOT EXISTS codes (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_id` varchar(255) NOT NULL,
`type` varchar(255) NOT NULL,
`code` varchar(255) NOT NULL,
`expires` DATETIME
)ENGINE=InnoDB;
如果重要,我会在$ expires变量上使用real_escape_string。
有人有任何建议吗?
答案 0 :(得分:0)
您的日期时间值(如2016-11-13T00:14:43.000Z
)是文本字符串。您需要将它们用插入语句的VALUES子句中的单引号括起来。
实际上,您需要围绕所有值使用单引号,因为它们都是文本字符串。
INSERT INTO codes (user_id, type, code, expires) VALUES ('$id', '$type', '$code', '$expires');
要理解这一点,我们假设您的$code
值为143-101
。如果你这样做
INSERT INTO junk (code) VALUES ($code)
从您的php程序,MySQL服务器将看到
INSERT INTO junk (code) VALUES (143-101)
将产生列值42
。这将使道格拉斯亚当斯高兴,但没有其他人。
您希望MySQL服务器看到
INSERT INTO junk (code) VALUES ('143-101')
你可以用
做什么 INSERT INTO junk (code) VALUES ('$code')
而且,如果这个应用程序可以被全球互联网访问,你必须研究SQL注入并使你的SQL注入证明,或者某些网络犯罪将 pwn你并窃取你的资产。