如何解决phpMyAdmin执行带有注释块的SQL脚本时解析失败?

风杰小哥_8288

风杰小哥_8288

2026-07-24

246人浏览

原创

phpmyadmin 因自研sql解析器限制无法正确处理/ /多行注释,易致语法错误;应确保注释前后有空白、禁用注释内分号、改用--单行注释,或预处理删除注释后导入。

phpmyadmin 无法识别 /* */ 多行注释导致 sql 执行中断

phpmyadmin 默认使用自己的 sql 解析器(非 mysql 原生解析),对 /* */ 注释块的处理较严格:若注释跨行、嵌套,或紧贴语句无空格分隔,就可能在分句阶段直接报错 mysql returned an empty result set (i.e. zero rows) 或更隐蔽的 #1064 - you have an error in your sql syntax,实际错误位置却指向注释之后的第一条有效语句。

这不是 MySQL 的问题,而是 phpMyAdmin 的 PMA_SQP_parse() 解析逻辑限制。它按分号 ; 切分语句,但若注释中含分号(如 /* SELECT * FROM t; */)或注释跨行后紧跟语句(如 /* comment */SELECT 1;),切分会错位。

  • 确保所有 /* */ 注释前后至少有一个空白字符(空格、换行),避免紧贴 SQL 关键字或分号
  • 禁止在注释内写分号;如需说明语句,改用 -- 单行注释(phpMyAdmin 对其兼容性更好)
  • 若脚本由其他工具生成(如 mysqldump),添加 --skip-comments 参数重导出,或手动删掉 /*! ... */ 条件注释块

phpMyAdmin 导入时跳过注释的两种实操方式

与其反复调整注释格式,不如让 phpMyAdmin 主动忽略它们。最可靠的是在导入前预处理 SQL 文件,而非依赖界面设置。

  • 用 sed 删除所有 /* */ 块(Linux/macOS):
    sed ':a;N;$!ba;s|/\*[^*]*\*\+([^/*][^*]*\*\+)*/||g' input.sql > clean.sql
    (注意:该正则不处理嵌套,但覆盖绝大多数情况)
  • Windows 用户可用 PowerShell 一行清除:
    (Get-Content input.sql) -replace '/\*[\s\S]*?\*/', '' | Set-Content clean.sql
  • 不推荐依赖 phpMyAdmin 的「忽略注释」勾选项(位于导入页面底部),它仅跳过以 -- 或 # 开头的单行注释,对 /* */ 完全无效

当必须保留注释时,绕过 phpMyAdmin 的替代执行路径

如果注释含关键上下文(如版本标记 /*!50708 SET sql_mode = 'STRICT_TRANS_TABLES' */),删掉会影响逻辑,此时应脱离 phpMyAdmin 的解析器。

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载
  • 通过命令行 mysql 直接执行:
    mysql -u root -p database_name  —— MySQL 服务端原生支持所有注释语法
  • 若只能用 Web 界面,改用 Adminer(轻量级替代品),它复用 MySQL 的协议层,不自行解析 SQL,/* */ 注释零问题
  • 在 phpMyAdmin 中拆分脚本:把含注释的大文件,按 ; 手动切成多个小段,逐段粘贴到「SQL」页执行(适合调试阶段)

容易被忽略的细节:BOM 和 UTF-8 编码干扰注释识别

某些编辑器(尤其是 Windows 上的记事本)保存 UTF-8 文件时会加 BOM(Byte Order Mark),phpMyAdmin 解析时可能将 BOM 视为非法字符,导致第一行注释(哪怕只是 /* */)被截断或错位,进而引发后续所有语句解析失败。

  • 用 file -i script.sql 检查是否含 BOM(输出含 charset=utf-8-with-bom)
  • Vim 中执行 :set nobomb | w 去除 BOM;VS Code 右下角编码处点击「UTF-8 with BOM」→「Save with Encoding」→ 选「UTF-8」
  • 即使注释本身完全合法,BOM 也会让 phpMyAdmin 把 /* 识别成 /*,从而彻底破坏注释边界判断

phpMyAdmin 的注释问题本质是解析器能力边界,不是配置能彻底解决的。真正省事的做法,是明确区分「开发调试用命令行」和「简单管理用 phpMyAdmin」——后者只处理无注释、单语句、UTF-8 no-BOM 的干净 SQL 片段。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

phpmyadmin php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

10244

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6041

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2095

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3808

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4494

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3531

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

5037

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

3942

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

11902

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 常见问题
phpMyAdmin 常见问题

共0课时 | 0人学习

phpMyAdmin 配置文档
phpMyAdmin 配置文档

共0课时 | 0人学习

phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习