代码之家  ›  专栏  ›  技术社区  ›  x4rf41

simple insert可以与phpmyadmin一起使用,但不能与php一起使用

  •  3
  • x4rf41  · 技术社区  · 16 年前

    我试图用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服务器版本相对应的手册,以获取在“;insert in to um_group_rights”附近使用的正确语法( um_group_id , cms_usecase_id , um_right_id )1号线V'

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

    2 回复  |  直到 13 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    只是确定一下:当您试图从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 在评论中:

    查询字符串不应以 分号。


    如果您正在使用 mysqli_* 功能(而不是 mysql_* )要访问数据库,可以尝试使用 mysqli_multi_query .

    不幸的是,有这样的功能 MyQuL** .

    (顺便说一句: MyQuL** API是旧的——使用它会更好,特别是对于一个新项目 MyQuiLi* )



    在评论后编辑:

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

    在这种情况下,可以尝试使用insert语法,该语法允许同时插入几行;请参见 12.2.5. INSERT Syntax 在mysql手册中 (引证) :

    INSERT 使用的语句 VALUES 语法可以插入多行。
    为此,请包含多个列表 列的值,每个值都包含在 用逗号分隔的圆括号。
    例子:

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

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

        2
  •  2
  •   Pekka    16 年前

    不像phpmyadmin, mysql_query() 一次只能执行一个查询。

    你得把绳子分开,或者换成 mysqli mysqli_multi_query() .