phpmyadmin用户列表搜索将下划线_视为like单字符通配符,导致含下划线的用户名(如admin_test)无法正常显示或操作;根本解决方法是全程使用反引号包裹标识符执行sql语句管理用户。
phpmyadmin里用户名带下划线会被当通配符
phpmyadmin底层用的是mysql的like语法做用户列表筛选,而下划线_在like里是单字符通配符——比如搜test_user,实际会匹配testauser、test1user等。这不是显示问题,是查询逻辑本身在“吃掉”你的下划线。
常见错误现象:
• 新建用户admin_test后,在用户列表里搜不到
• 点击“编辑权限”时跳转到admin%test或直接报错Unknown user
• 用SQL语句查mysql.user表能看见记录,但phpMyAdmin界面不显示
- 根本原因不是phpMyAdmin“不支持下划线”,而是它把用户名当
LIKE模式用了,没做ESCAPE处理 - MySQL服务端本身完全支持含
_的用户名(只要用反引号包住),问题纯属phpMyAdmin前端过滤逻辑缺陷 - 别试图用
_或\_在界面上输入——phpMyAdmin不会转义,反而可能存成字面量反斜杠
唯一可靠办法:绕过phpMyAdmin界面,直连执行SQL
phpMyAdmin的“用户账户”页面对特殊字符用户名基本不可靠,必须用SQL方式创建和管理。这不是权宜之计,是当前版本(5.2.x / 6.0.x)的事实标准操作路径。
- 进phpMyAdmin → 左侧选
mysql数据库 → 顶部点“SQL”标签页 - 执行带反引号的
CREATE USER语句,例如:CREATE USER `admin_test`@'localhost' IDENTIFIED BY 'your_password';
- 权限也必须用SQL授:
GRANT SELECT, INSERT ON `mydb`.* TO `admin_test`@'localhost';
- 切记:所有含下划线、短横、数字开头的用户名,都必须用
`包裹,不能省略
后续登录和权限管理仍要小心
即使成功创建了`admin_test`,phpMyAdmin在后续操作中依然可能误解析——尤其当你点“刷新权限”或“导出用户”时,它会尝试用LIKE查用户名,导致漏掉或报错。
- 修改密码别用界面“更改密码”按钮,改用:
ALTER USER `admin_test`@'localhost' IDENTIFIED BY 'new_pass';
- 删用户也别点“删除”图标,执行:
DROP USER `admin_test`@'localhost';
- 如果非要用界面查看用户列表,搜索框里输
admin_test并勾选“使用正则表达式”(但这个选项不稳定,部分版本不生效) - MySQL 8.0+ 开启
sql_mode=NO_BACKSLASH_ESCAPES时,_写法会失效,只认`包裹
为什么不用mysqli_real_escape_string或addcslashes
这些PHP函数对phpMyAdmin无效——它们作用于应用层字符串拼接,而phpMyAdmin的用户管理功能走的是预编译SQL + 前端JS过滤双路径,你加的转义在到达MySQL前就被界面逻辑吃掉了。
-
mysqli_real_escape_string只影响你自己写的PHP代码,不影响phpMyAdmin内部SQL生成 - 在phpMyAdmin的SQL窗口里手动输入
admin_test,MySQL会把它当字面量下划线,但phpMyAdmin自己的用户列表页不会触发这个SQL窗口的上下文 - 真正起作用的只有反引号
`:它是SQL标准语法,MySQL服务端强制识别,绕过所有中间层歧义
反引号不是“技巧”,是MySQL对标识符的硬性要求。只要用户名不符合[a-zA-Z0-9$_]简单命名规则,就必须加。这点容易被忽略,因为日常建表名带下划线时phpMyAdmin自动加了反引号,但用户管理页偏偏没加。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











