我在PHP中动态形成MySQL语句,无法弄清楚为什么这个语句无法执行:
INSERT INTO users ( `email`, `password`, `first_name`, `last_name`, `url`,
`description`, `media`, `tags`, `zip`, `country`, `lat`, `lon`, `city`, `state`,
`datetime_joined`, `API_key`, `verified`, `likes`, `email_confirmation_code`,
`email_confirmed`) VALUES ( 'brannon@brannondorsey.com',
'f1e5aeb519396a87bd2a90e6a680d18713b1ecbe', 'Brannon', 'Dorsey',
'brannondorsey.com', 'description', 'sculpture, photography, creative code',
'saic, chicago, richmond, young arts', '60601', 'us', '41.8858', '-87.6181',
'Chicago', 'Illinois', '2013-06-26T23:50:29+0200',
'7e852a3e97257b563ffbb879d764ce56110ccb70', '0',
'0','c35bad0dc9b058addbf47eef8dda2b124528751e', '0')
我已经检查了要插入的列的拼写和格式以及表名,一切都是正确的。有谁知道可能会发生什么?我不是想为其他人做忙碌的工作,我无法弄清楚这里发生了什么。
谢谢!
更新
以下是我创建表格的声明:
CREATE TABLE users (
id mediumint(8) unsigned NOT NULL auto_increment,
email varchar(255) default NULL,
password varchar(255),
url TEXT default NULL,
description TEXT default NULL,
city varchar(255),
state TEXT default NULL,
country varchar(100) default NULL,
zip varchar(10) default NULL,
datetime_joined varchar(255),
media varchar(255) default NULL,
tags varchar(255) default NULL,
API_key varchar(255),
verified mediumint default NULL,
first_name varchar(255) default NULL,
last_name varchar(255) default NULL,
API_hits mediumint default NULL,
API_hit_date varchar(255),
likes mediumint default NULL,
lat varchar(30) default NULL,
lon varchar(30) default NULL,
email_confirmation_code varchar(255),
email_confirmed mediumint default NULL,
PRIMARY KEY (id),
FULLTEXT(`first_name`, `last_name`, `email`, `url`, `description`, `media`, `tags`, `city`, `state`, `country`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
我尝试从所有数字中删除单引号,但这不起作用。另外,最奇怪的是,当我将失败的查询回显到浏览器然后复制&将它粘贴到PhpMyAdmin的sql输入框中,该行插入...有什么想法吗?
更新
self::$mysqli->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 '\'brannon@brannondorsey.com\', \'f1e5aeb519396a87bd2a90e6a680d18713b1ecbe\', \'B' at line 1
更新:请参阅下面的答案......我无法回答自己的问题两天。谢谢大家。
答案 0 :(得分:3)
我挖掘了我正在进行的所有字符串操作,以动态构建查询,并发现我使用real_escape_string
来查询部分查询而不仅仅是进入它的值。这就解释了为什么从浏览器复制时查询有效。
答案 1 :(得分:1)
不确定,但是你的lat和long作为字符串插入,尝试删除引号并将它们作为数字插入。所有你的数字字段。
答案 2 :(得分:0)
据我所知,您的列和值匹配,但除非您向我们展示用于创建表的语句,否则我无法确定它是否适合您的架构。查看创建此查询的PHP也很有帮助。如果在某个地方找不到我们看不到的错误,我就不会感到惊讶,你只是忽略了(不能责怪你;对你自己的代码来说很容易)。
除了将这些添加到代码中之外,我还有另外一种可能的解释:根据你的sql实现的挑剔程度,可能是你的语句后缺少;
。