php增删改查需要哪些扩展_开启mysqli或pdo扩展方法【说明】

发布时间 - 2026-01-01 00:00:00    点击率:
PHP CRUD需启用mysqli或PDO扩展,因二者默认未开启;Linux用apt/dnf安装php-mysql/php-mysqlnd,Windows在php.ini中取消extension=mysqli和extension=pdo_mysql注释,重启服务后验证函数与类存在。

PHP 增删改查(CRUD)本身不依赖特定扩展,但必须启用至少一个数据库驱动扩展——mysqliPDO(推荐搭配 pdo_mysql)。没开这两个中的任意一个,mysql_connect() 这类函数根本不存在,连连接都建立不了。

为什么 mysqli 和 PDO 都得「手动开启」?

PHP 默认编译时通常不启用数据库扩展,尤其是 Windows 下的 ZIP 包或某些 Linux 发行版精简包。它们被编译为动态模块(.so 或 .dll),需在 php.ini 中显式启用,否则调用会报错:Fatal error: Uncaught Error: Call to undefined function mysqli_connect()Class 'PDO' not found

  • mysqli 是 MySQL 专用扩展,支持面向对象和过程式两种风格,对 MySQL 特性(如预处理、多语句、事务)支持更直接
  • PDO 是通用数据库抽象层,本身不干活,必须配合具体驱动(如 pdo_mysql);写法统一,换数据库时改动小
  • 二者不能互相替代:启用了 PDO 但没启 pdo_mysql,依然连不上 MySQL

Linux 下启用 mysqli 和 pdo_mysql 的典型步骤

以主流发行版(Ubuntu/Debian/CentOS)为例,PHP 通常通过包管理器安装,扩展也对应独立包:

  • Ubuntu/Debian:
    sudo apt install php-mysql
    (该包同时启用 mysqlipdo_mysql
  • CentOS/RHEL 8+:
    sudo dnf install php-mysqlnd
    mysqlnd 是原生驱动,比 libmysql 更推荐)
  • 确认是否生效:
    php -m | grep -E '^(mysqli|pdo|pdo_mysql)$'
    应输出三行(mysqlipdopdo_mysql
  • 若用 Apache,重启服务:
    sudo systemctl restart apache2
    (Ubuntu)或
    sudo systemctl restart httpd
    (CentOS)
  • Nginx + PHP-FPM 需重启 php-fpm
    sudo systemctl restart php*-fpm
    (版本号需补全,如 php8.2-fpm

Windows 下在 php.ini 中启用扩展

找到你实际使用的 php.ini 文件(运行 php --ini 查看路径),编辑它:

  • 取消注释这两行(删除前面的分号 ;):
    ;extension=mysqli
    ;extension=pdo_mysql
    → 改成:
    extension=mysqli
    extension=pdo_mysql
  • 注意:不是 extension=pdo —— PDO 核心已内置,但驱动必须单独开;pdo_mysql 才是 MySQL 驱动
  • 如果使用 php_xampp 或旧版,可能看到 php_mysqli.dll,确保 extension_dir 指向正确的 ext/ 目录
  • 改完保存,重启 Web 服务器(Apache 或 Nginx)或 PHP-FPM 进程
  • 证:
    php -r "var_dump(function_exists('mysqli_connect'), class_exists('PDO'));"
    输出 bool(true) bool(true) 即成功

最容易忽略的是:开了 PDO 没开 pdo_mysql,或者开了 mysqli 却误以为 PDO 也能自动用上;还有人改了错误的 php.ini(CLI 和 Web 使用的配置文件常不同),结果 php -v 看着正常,网页里却报错。


# mysql  # php  # linux  # centos  # php8  # windows  # apache  # nginx  # ubuntu  # win  # 面向对象  # Error  # mysqli  # pdo  # bool  # class  # undefined  # function  # 对象  # 数据库  # debian  # 重启  # 开了  # 报错  # 的是  # 看着  # 发行版  # 尤其是  # 才是  # 两种  # 也能 


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


相关推荐: 如何快速搭建虚拟主机网站?新手必看指南  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何快速完成中国万网建站详细流程?  手机网站制作与建设方案,手机网站如何建设?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  音响网站制作视频教程,隆霸音响官方网站?  清除minerd进程的简单方法  如何在云主机上快速搭建网站?  如何在建站主机中优化服务器配置?  EditPlus中的正则表达式 实战(4)  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  微信小程序 闭包写法详细介绍  网站制作企业,网站的banner和导航栏是指什么?  如何快速生成专业多端适配建站电话?  如何在宝塔面板中创建新站点?  Laravel如何创建自定义Artisan命令?(代码示例)  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  Laravel怎么判断请求类型_Laravel Request isMethod用法  ,在苏州找工作,上哪个网站比较好?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  JavaScript模板引擎Template.js使用详解  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  香港服务器租用每月最低只需15元?  如何在腾讯云服务器快速搭建个人网站?  Laravel如何自定义分页视图?(Pagination示例)  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  如何在Windows服务器上快速搭建网站?  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  北京的网站制作公司有哪些,哪个视频网站最好?  Android使用GridView实现日历的简单功能  佛山企业网站制作公司有哪些,沟通100网上服务官网?  JS中对数组元素进行增删改移的方法总结  网站建设整体流程解析,建站其实很容易!  Python3.6正式版新特性预览  微信小程序 五星评分(包括半颗星评分)实例代码  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  Laravel如何使用Blade组件和插槽?(Component代码示例)  深圳网站制作培训,深圳哪些招聘网站比较好?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】