由于phpMyAdmin默认禁用了多语句执行功能,当用户提交包含多条SQL语句的查询时,仅有第一条语句会被执行。要启用多语句支持,需修改phpMyAdmin的config.inc.php配置文件,在其中添加$cfg['Servers'][$i]['AllowArbitraryServer']=true和$cfg['Servers'][$i]['mysqli_
先说一个很多刚接触 phpMyAdmin 的朋友容易踩的坑:在 SQL 输入框里辛辛苦苦写了好几条语句,分号分得清清楚楚,一点执行却发现只有第一条生效,后面的仿佛凭空消失。不少人以为是 Bug,其实这是 phpMyAdmin 的默认安全设置——它故意不让多语句同时执行。
phpMyAdmin 默认通过 mysqli 扩展连接数据库时,mysqli_multi_query() 是关闭的。换句话说,就算贴进去的 SQL 用分号隔得再规范——比如 create table t1(...); insert into t1 values (1);——它也只会解析并执行第一条,后面的直接丢弃。这不是 Bug,而是 phpMyAdmin 的防御姿态:宁可少跑,不能乱跑。
长期稳定更新的攒劲资源: >>>点此立即查看<<<

要弄明白这个问题的根子,得从配置说起。很多人以为跟 $cfg['AllowUserDropDatabase'] 有关,实际上真正卡住脖子的,是连接初始化时有没有带上 MYSQLI_CLIENT_MULTI_STATEMENTS 这个标志。从 phpMyAdmin 2.11.x 之后的版本开始,默认就不启用了。
phpinfo() 页,确认是不是 ≥ 4.0。只有较新的版本才支持这个配置开关。EXECUTE 权限。某些老版本的 MySQL 可能会要求 SUPER,但大多数场景下不需要这么高。如果在界面上看到一个「允许运行多个查询」的勾选框,别高兴太早——光勾上是没用的,必须改服务端配置。核心操作分两步:允许任意服务器参数传递,再强制 mysqli 启用多语句客户端标志。
打开 phpMyAdmin 根目录下的 config.inc.php,在 $cfg['Servers'][$i]['host'] 那个配置块里,添加或修改下面这两行:
$cfg['Servers'][$i]['AllowArbitraryServer'] = true; $cfg['Servers'][$i]['extension'] = 'mysqli';
然后,在同一个配置块里继续追加:
$cfg['Servers'][$i]['mysqli_connect_flags'] = MYSQLI_CLIENT_MULTI_STATEMENTS;
MYSQLI_CLIENT_MULTI_STATEMENTS 是个整数常量,值就是 1,PHP 会自动解析出来。如果报错说 undefined constant,那就先确认一下 PHP 环境有没有加载 mysqli 扩展,以及版本是不是 ≥ 5.5。sudo systemctl restart apache2 或 nginx),只刷新页面是没用的。php.ini 里有没有把 mysqli.allow_persistent = On 给禁掉——虽然不太直接相关,但某些环境下会影响标志生效。就算后端已经打开了多语句开关,输入的内容也可能因为格式问题被截断。phpMyAdmin 对语句分隔和注释的处理比较严格,得小心一点。
;),而且分号后面最好不要紧跟换行加空格再来新语句。建议写成紧凑格式:SELECT * FROM t; UPDATE t SET x=1; DELETE FROM t;//),phpMyAdmin 可能误判成语句结束。换成 -- 或 /* */ 更稳。DELIMITER $$ 把定界符改了,否则整个块会被拆成一堆碎片报错。SET @a=1; SELECT @a;)在 phpMyAdmin 里也有可能失败,因为每条语句是独立执行的上下文。如果你只是想批量跑一批建表和初始化数据的 SQL,那 phpMyAdmin 的多语句功能始终有边界——比如大事务回滚、长连接超时、内存限制,这些都可能出问题。与其跟它较劲,不如换个路子。
最稳的方式还是原生命令行:
mysql -u root -p database_name < /path/to/your/script.sql
或者,在 phpMyAdmin 界面上点「导入」→ 选 SQL 文件 → 勾上「允许中断」和「启用多查询」(这个选项在导入页是真实有效的,比「SQL」标签页更底层)。
注意:script.sql 文件里还是要遵守前面说的分号和 DELIMITER 规则。如果文件里带了中文或特殊字符,确保编码是 UTF-8 无 BOM,不然很可能报 #1064 - You have an error in your SQL syntax。
说到底,真正麻烦的不是开不开配置开关,而是当你要混合使用 DELIMITER、事务控制(BEGIN/COMMIT)和用户变量的时候,phpMyAdmin 的解析器很容易在语义层面就翻车。这种场景,建议直接切到终端处理,省心得多。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述