mysqli和PDO创建数据库本质无差异,均执行CREATE DATABASE语句;区别在于连接管理、错误处理机制及后续扩展性:mysqli需手动检查连接与查询结果,易忽略警告,SQL拼接需转义;PDO需启用异常模式并显式指定字符集,权限与SQL模式限制两者均受同等影响。
创建数据库本身不涉及复杂查询或事务,mysqli 和 PDO 都只是执行一条 CREATE DATABASE 语句,底层调用完全一致。区别不在“能不能做”,而在于连接建立、错误处理、后续扩展是否顺手。
mysqli 分面向对象和过程式两种风格,但都要求先建立连接再发命令;若

mysqli_query(),会触发警告而非异常,容易被忽略。
mysqli_connect() 返回值,null 表示连接失败mysqli_query($conn, "CREATE DATABASE test") 成功返回 true,失败返回 false,需配合 mysqli_error($conn) 查错`my-db`
localhost,部分环境会走 socket 而非 TCP,导致权限判断和 host 匹配行为与预期不同PDO 默认关闭异常模式,不显式设置 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,exec() 失败也只返回 false,和 mysqli 一样静默失败。
mysql:host=localhost,而非 mysql:host=localhost;dbname=test
$pdo->exec("CREATE DATABASE `test_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci") 时,字符集必须显式指定,否则依赖 MySQL 全局配置,上线后可能不一致PDO::ATTR_EMULATE_PREPARES 对 CREATE DATABASE 无影响,无需调整localhost 权限,而 PHP 连接用的是 127.0.0.1,会报 Access denied —— 这和驱动无关,是权限匹配问题单看建库操作,两者代码量接近,出错路径也类似。但后续如果要导入 SQL 文件、批量建表、处理事务或切换数据库,PDO 的预处理、统一异常、多数据库抽象能力就体现出来了;而 mysqli 的 multi_query() 和异步查询在特定运维脚本里仍有不可替代性。
最容易被忽略的是:无论选哪个,建库前都得确保连接用户有 CREATE 权限,且未开启 sql_mode=STRICT_TRANS_TABLES 等导致默认字符集不兼容的限制 —— 这些问题不会因为换驱动就消失。