如何在分号附近的多语句mysql查询中解决语法错误

时间:2014-07-04 11:59:02

标签: php mysql sql

我正在尝试使用mysql进行多语句查询,但是我收到语法错误:

  

"您的SQL语法出错了;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近' INSERT INTO vinas_new(img,new_order,publi' at line 2"

奇怪的是,如果我回显查询的字符串并尝试在Navicat上执行它,它的工作没有问题。

我尝试使用的查询字符串就是这个。

'BEGIN;
    INSERT INTO vinas_new (
        img,                                
        new_order,
        publicationDate,
        active,
        cover
    )VALUES(
        "'.$data['img'].'",                             
        "'.$data['new_order'].'",
        "'.$data['publicationDate'].'",
        "'.$data['active'].'",
        "'.$data['cover'].'"
    );                          
    INSERT INTO vinas_new_content (
        newId,
        lang,
        title,
        text
    )VALUES(    
        LAST_INSERT_ID(),
        "'.mysql_real_escape_string($data['lang']).'",
        "'.mysql_real_escape_string($data['title']).'",
        "'.mysql_real_escape_string($data['text']).'"
    );
COMMIT;';

我想它与分号有关,我试图使用分隔符来避免这个问题,但没有任何运气。

有什么建议吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

最简单的调试方法是向我们展示echo $sql的结果(或者您存储查询的变量名称)。

但是,您似乎使用过时的mysql_ API doesn't support multiple queries

  

mysql_query()向与指定link_identifier关联的服务器上的当前活动数据库发送唯一查询(不支持多个查询)

尝试切换到mysqli(或PDO)并使用prepared statement(或其中3个),这样您就不必自己逃避数据(如果您想坚持使用{{ 1}}你必须将它分成3个查询;或者为任务创建存储过程。

或者,如果你坚持一次性完成所有操作(我认为你没有任何理由),你可以使用mysqli::multi_query()