【问题标题】:Simple Insert works with phpmyadmin but not with php简单插入适用于 phpmyadmin 但不适用于 php
【发布时间】:2010-02-27 20:52:45
【问题描述】:

我试图用 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_id,cms_usecase_id,um_right_id) V'

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

【问题讨论】:

  • 除了sn-p这个代码,能贴出调用查询的代码吗?

标签: php mysql


【解决方案1】:

请确定:当您尝试从 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 没有告诉你的事情。

并且,作为 cmets 中的@Alexandre pointed out

查询字符串不应以 分号。


如果您使用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);

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

【讨论】:

  • 谢谢,我不知道.... 还是很愚蠢的 imo。我虽然我会在一个字符串中使用更多查询来获得更好的性能,但这就是我这样做的原因
  • 同时引用 mysql_query() 文档:The query string should not end with a semicolon.
  • @Alexandre:感谢您指出这一点:我已经删除了分号,但并不知道它是否会改变任何东西;;我也在编辑我的答案以坚持这一点。
  • @xarfai :我已经编辑了我的答案以提供一些附加信息;;特别是关于允许在一个查询中插入多行的 INSERT 语法——也许这也有帮助 ;-)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多