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


How can I solve syntax error on multistatement mysql query near semicolon

我试图做一个多语句查询mysql,但我得到一个语法错误:

"你的SQL语法有错误;查看手册对应于MySQL服务器版本,以便使用正确的语法INSERT INTO vinas_new (img, new_order, publici ' 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;';

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

有什么建议吗?

感谢您的宝贵时间。

最简单的调试方法是直接显示echo $sql的结果(或者您存储查询的变量名称)

然而,你似乎使用过时的mysql_ API,不支持多个查询:

mysql_query()向与指定的link_identifier

相关联的服务器上当前活动的数据库发送一个唯一查询(不支持多个查询)

尝试切换到mysqli(或PDO)并使用准备好的语句(或其中3个),这样你就不必自己逃避数据(如果你想坚持使用mysql_,你必须将其分割为3个查询;或为任务创建存储过程)。

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