PHP连接MySQL创建数据库必须启用mysqli或PDO扩展,否则会报错;PHP 8.0+已移除mysql_*函数,仅支持mysqli和PDO_mysql;需确认php.ini中正确开启对应扩展并检查依赖、路径及CLI/Web配置一致性。
不启用扩展,mysqli_connect() 和 PDO::__construct() 都会报错,比如 Call to undefined function mysqli_connect() 或 Class 'PDO' not found。PHP 默认不强制启用任一 MySQL 相关扩展,尤其是较新版本(如 PHP 8.0+)已彻底移除 mysql_* 函数,仅保留 mysqli 和 PDO_mysql 两种合法方式。
在 Web 环境中,建一个 info.php 文件,内容为 ,浏览器访问后搜索 “mysqli” 或 “pdo_mysql”。命令行下直接运行:
php -m | grep -i "mysqli\|pdo"
若无输出,说明未启用;若只看到 pdo 但没 pdo_mysql,PDO 也不能操作 MySQL。
mysqli 是 MySQL 原生驱动,支持面向对象和过程式调用,创建数据库常用 mysqli_query($conn, "CREATE DATABASE ...")
PDO_mysql 是 PDO 的 MySQL 具体实现,需确保 extension=pdo_mysql 在 php.ini 中开启(仅开 pdo 不够)php.ini 通常在 PHP 安装目录,扩展文件如 php_mysqli.dll、php_pdo_mysql.dll 需在 ext/ 目录且未被注释
php-mysql(含 mysqli 和 pdo_mysql),而非仅 php-common
即使写了 extension=mysqli,也可能因路径错误或缺少依赖失败。Windows 下典型问题:
extension_dir 指向错误目录(如写成 ext 但实际是 ./ext 或绝对路径不对)libmysql.dll 或 php_mysqli.dll 依赖的 VC 运行库(如 VS2019 运行时),导致 Apache 启动失败或页面空白php_mysqli.dll 加载到 PHP 8.1 环境)php.ini:php --ini 查 CLI 路径,phpinfo() 查 Web 路径,二者需分别配置扩展启用后,以下代码可直接运行(注意替换主机、用户、密码):
$conn = mysqli_connect('localhost', 'root', 'password');
if (!$conn) {
die('连接失败: ' . mysqli_connect_error());
}
if (mysqli_query($conn, "CREATE DATABASE IF NOT EXISTS testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")) {
echo "数据库创建成功";
} else {
echo "创建失败: " . mysqli_error($conn);
}
mysqli_close($conn);
关键点:不能直接在 mysqli_connect() 里指定数据库名(那是连接后要选的库),创建库本身必须先连上 MySQL 服务(不指定 DB),再发 CREATE DATABASE 语句。PDO 写法类似,但要用 PDO::exec(),且 DSN 中也不能带数据库名。
最常被忽略的是字符集声明——不加 CHARACTER SET utf8mb4,后续存 emoji 或某些生僻字会出错;而这个设置必须在 CREATE DATABASE 时定死,后期改成本来就麻烦。