php创建数据库需要安装扩展吗_php启用mysqli或pdo扩展【配置】

发布时间 - 2026-01-25 00:00:00    点击率:
PHP连接MySQL创建数据库必须启用mysqli或PDO扩展,否则会报错;PHP 8.0+已移除mysql_*函数,仅支持mysqli和PDO_mysql;需确认php.ini中正确开启对应扩展并检查依赖、路径及CLI/Web配置一致性。

PHP 连接 MySQL 创建数据库,必须启用 mysqli 或 PDO 扩展

不启用扩展,mysqli_connect()PDO::__construct() 都会报错,比如 Call to undefin

ed function mysqli_connect()Class 'PDO' not found。PHP 默认不强制启用任一 MySQL 相关扩展,尤其是较新版本(如 PHP 8.0+)已彻底移除 mysql_* 函数,仅保留 mysqliPDO_mysql 两种合法方式。

确认扩展是否已启用:用 phpinfo() 或命令行查

在 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_mysqlphp.ini 中开启(仅开 pdo 不够)
  • Windows 下常见路径:php.ini 通常在 PHP 安装目录,扩展文件如 php_mysqli.dllphp_pdo_mysql.dll 需在 ext/ 目录且未被注释
  • Linux(如 Ubuntu)用 apt 安装时,常需额外安装包:php-mysql(含 mysqli 和 pdo_mysql),而非仅 php-common

启用扩展后仍连不上?检查 extension_dir 和依赖

即使写了 extension=mysqli,也可能因路径错误或缺少依赖失败。Windows 下典型问题:

  • extension_dir 指向错误目录(如写成 ext 但实际是 ./ext 或绝对路径不对)
  • 缺少 libmysql.dllphp_mysqli.dll 依赖的 VC 运行库(如 VS2019 运行时),导致 Apache 启动失败或页面空白
  • PHP 版本与扩展 DLL 不匹配(如用 PHP 8.2 的 php_mysqli.dll 加载到 PHP 8.1 环境)
  • CLI 和 Web 使用不同 php.iniphp --ini 查 CLI 路径,phpinfo() 查 Web 路径,二者需分别配置

创建数据库的最小可行代码(以 mysqli 为例)

扩展启用后,以下代码可直接运行(注意替换主机、用户、密码):

$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 时定死,后期改成本来就麻烦。


# mysql  # php  # linux  # word  # windows  # apache  # 浏览器  # ubuntu  # win  # sql创建  # 面向对象  # mysqli  # pdo  # class  # undefined  # function  # 对象  # database  # 数据库  # 报错  # 命令行  # 移除  # 的是  # 生僻字  # 那是  # 尤其是  # 两种  # 要用  # 写了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 焦点电影公司作品,电影焦点结局是什么?  教你用AI润色文章,让你的文字表达更专业  JavaScript实现Fly Bird小游戏  jQuery 常见小例汇总  SQL查询语句优化的实用方法总结  如何在橙子建站上传落地页?操作指南详解  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  网站制作免费,什么网站能看正片电影?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  如何打造高效商业网站?建站目的决定转化率  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  C语言设计一个闪闪的圣诞树  浅析上传头像示例及其注意事项  如何快速搭建个人网站并优化SEO?  javascript中的try catch异常捕获机制用法分析  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  如何获取上海专业网站定制建站电话?  javascript读取文本节点方法小结  高端建站三要素:定制模板、企业官网与响应式设计优化  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  java ZXing生成二维码及条码实例分享  如何确认建站备案号应放置的具体位置?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Python文本处理实践_日志清洗解析【指导】  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  Laravel如何为API编写文档_Laravel API文档生成与维护方法  利用JavaScript实现拖拽改变元素大小  什么是javascript作用域_全局和局部作用域有什么区别?  如何快速搭建支持数据库操作的智能建站平台?  Python高阶函数应用_函数作为参数说明【指导】  长沙企业网站制作哪家好,长沙水业集团官方网站?  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  免费网站制作appp,免费制作app哪个平台好?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel如何创建自定义Artisan命令?(代码示例)  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  如何在新浪SAE免费搭建个人博客?  免费视频制作网站,更新又快又好的免费电影网站?  如何用虚拟主机快速搭建网站?详细步骤解析  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤