INSERT INTO MySQL 语句失败

Posted

技术标签:

【中文标题】INSERT INTO MySQL 语句失败【英文标题】:INSERT INTO MySQL statement failing 【发布时间】:2013-06-26 22:02:45 【问题描述】:

我在 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->errorYou 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

更新:请参阅下面的答案...两天内我无法回答自己的问题。谢谢大家。

【问题讨论】:

请问实际的错误文本是什么? 如果self::$mysqli->query($query) 返回false,我只是在回应“MYSQL QUERY FAILED”。有没有更好的具体方法来报告这个错误? 是的。查看mysqli::$error的文档 运行 mysql,或 phpmyadmin 或任何你使用的东西,然后粘贴查询并执行。我们只能根据这么多信息猜测 @TonyHopkinson 我将查询复制并粘贴到 PhpMyAdmin 并插入查询行...1 row inserted. Inserted row id: 102 ( Query took 0.0003 sec ) 【参考方案1】:

我挖掘了我为动态构建查询所做的所有字符串操作,发现我使用real_escape_string 来处理查询的一部分,而不仅仅是输入其中的值。这就解释了为什么从浏览器复制时查询有效。

【讨论】:

【参考方案2】:

不确定,但是您的 lat 和 long 是作为字符串插入的,请尝试删除引号并将它们作为数字插入。所以对于你所有的数字字段。

【讨论】:

刚刚执行但仍未执行。我将使用我的表架构进行更新。【参考方案3】:

据我所知,您的列和值匹配,但除非您向我们展示用于创建表的语句,否则我无法确定它是否符合您的架构。查看创建此查询的 PHP 也会很有帮助。如果在我们看不到的地方存在不匹配,而您只是忽略了(不能怪您;对您自己的代码执行此操作很容易),我不会感到惊讶。

除了将这些添加到代码中之外,我还有另一种可能的解释:根据您的 sql 实现的挑剔程度,可能是您声明后缺少的;

【讨论】:

我刚刚在查询末尾添加了一个;,但这不起作用。我会尝试其余的。但是我觉得很奇怪,如果我将查询复制并粘贴到 phpmyadmin 中,它会正确执行。

以上是关于INSERT INTO MySQL 语句失败的主要内容,如果未能解决你的问题,请参考以下文章

INSERT INTO 因 node-mysql 失败 - 变量始终为 NULL

MySQL中insert into语句的6种写法

INSERT INTO 因 node-mysql 而失败

mysql insert into 多条数据

insert into的用法

MySQL 关于表复制 insert into 语法的详细介绍