Simple Insert适用于phpmyadmin但不适用于php

时间:2010-02-27 20:52:45

标签: php mysql

我试图用mysql_query

插入此查询
INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,1,1) ; 
INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,2,1) ; 
INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,3,1) ; 
INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,4,1) ;

然后它返回: 1064 - 您的SQL语法出错;检查与您的MySQL服务器版本对应的手册,以便在'附近使用正确的语法;在第1行插入um_group_rights(um_group_idcms_usecase_idum_right_id)V'

它显然有分号的问题,但我不明白为什么。它在phpmyadmin中没有问题。 php版本是5.2.6

2 个答案:

答案 0 :(得分:2)

只是为了确定:当您尝试从PHP执行这4个查询时,您要调用mysql_query四次?

例如:

mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,1,1)");
mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,2,1)");
mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,3,1)");
mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,4,1)");


我的意思是:您不能一次发送多个不同的查询,只需拨打一次mysql_query (引用,强调我的)

  

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

你必须“分离”你的查询 - 这可能是phpMyAdmin没有告诉你的事情。

并且,评论中的@Alexandre pointed out

  

查询字符串不应以a结尾   分号。


如果您使用mysqli_*函数(而不是mysql_*)来访问数据库,则可以尝试使用mysqli_multi_query

不幸的是,mysql_*有这样的功能。

(顺便说一句:mysql_* API是旧的 - 如果使用mysqli_*

会更好,特别是对于新项目而言



在评论后修改:

如果是关于表演的话,是的,对数据库进行一次调用,而不是连续四次PHP <-> MySQL次呼叫,可能会更好。

在这种情况下,您可以尝试使用允许一次插入多行的插入语法;请参阅MySQL手册中的12.2.5. INSERT Syntax (引用)

  使用INSERT

VALUES语句   语法可以插入多行。   
为此,请包含多个列表   列值,每个都包含在其中   括号并用逗号分隔。   
示例:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
     

每行的值列表必须是   括在括号内。

答案 1 :(得分:2)

与phpMyAdmin不同,mysql_query()一次只能执行一个查询。

您必须拆分字符串,或切换到mysqlimysqli_multi_query()