确认mysqli扩展是否启用需先通过phpinfo()查“Loaded Configuration File”路径,再检查该php.ini中extension=mysqli是否启用,最后验证php -m | grep mysqli及extension_loaded('mysqli')返回true。

确认 mysqli 扩展是否已启用
很多问题其实不是“没配”,而是压根没加载成功。先用 phpinfo() 确认实际生效的 php.ini 路径——打开浏览器访问 http://localhost/dashboard/phpinfo.php,查 “Loaded Configuration File” 这一行。别凭印象去改错文件(比如改了 php.ini-development 却没重命名或没被加载)。
在输出页里搜 mysqli,看到 “mysqli support → enabled” 和 “Client API library version → mysqlnd” 或 “libmysqlclient” 就说明扩展已加载;如果整块区域缺失,说明没启用或路径/拼写有误。
常见错误现象:
– 页面报 Fatal error: Uncaught Error: Call to undefined function mysqli_connect()
– phpMyAdmin 提示 “The mysqli extension is missing!”
– extension_loaded('mysqli') 返回 false
修改 php.ini 启用 mysqli 扩展
XAMPP 默认把 mysqli 扩展行注释掉了,得手动放开。打开你刚确认的 php.ini 文件(典型路径如 C:\xampp\php\php.ini),搜索以下两行:
立即学习“PHP免费学习笔记(深入)”;
extension=mysqliextension=pdo_mysql
确保它们前面没有分号 ;,且未被其他符号干扰。注意:XAMPP 7.4+ 版本通常用 extension=mysqli(不带 .dll 后缀),旧版本可能写成 extension=php_mysqli.dll —— 优先按当前版本推荐格式写,否则会加载失败。
还要检查 extension_dir 是否指向正确目录:extension_dir = "C:\xampp\php\ext"(Windows)或对应你的安装路径。路径错误会导致所有扩展加载失败,但错误提示往往很隐晦。
改完必须重启 Apache 服务(不是只刷新页面),否则配置完全不生效。
验证连接时字符集是否为 utf8mb4
即使 mysqli 加载成功,PHP 连接 MySQL 时默认仍可能用 utf8(即 utf8mb3),导致 emoji 或四字节字符存不进数据库。
不能只靠 MySQL 服务端设 utf8mb4,PHP 层也得显式指定:
- 面向对象方式:创建连接后立刻调用
$mysqli->set_charset('utf8mb4') - 面向过程方式:连接后调用
mysqli_set_charset($conn, 'utf8mb4') - 或者在连接字符串中加参数:
new mysqli('localhost', 'root', '', 'db', 3306, null, MYSQLI_CLIENT_SSL)不行,得靠set_charset补上
漏掉这步,CREATE TABLE 设了 CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 也没用——数据进来就截断或转成问号。
phpMyAdmin 报 mysqli 缺失?检查 config.inc.php
phpMyAdmin 是独立于 PHP 的 Web 应用,它自己的配置也可能绕过全局扩展设置。如果 phpMyAdmin 页面报错 “The mysqli extension is missing!”,但 phpinfo() 显示正常,就要看它的配置文件。
打开 C:\xampp\phpMyAdmin\config.inc.php,找到类似这段:
$cfg['Servers'][$i]['extension'] = 'mysqli';
确保这一行存在且值是 'mysqli'(不是 'mysql',后者是已废弃的旧扩展)。如果整行被注释或写成了 'pdo',phpMyAdmin 就会拒绝启动 mysqli 支持。
另外,若你改过 MySQL 端口(比如从 3306 改成 3307),这里还得同步改:$cfg['Servers'][$i]['port'] = '3307';
这类配置不依赖 Apache 重启,改完保存即可生效,但容易被忽略。
最常被跳过的其实是 extension_dir 路径和 set_charset 调用这两步——前者让扩展根本加载不了,后者让扩展加载了却连错编码。别只盯着“启用”二字,得盯住整个链路:ini 文件 → 扩展加载 → 连接初始化 → 字符集协商。



















