php数据库怎么进用mysql扩展进库_php老扩展连库法【教程】
发布时间 - 2026-01-26 00:00:00 点击率:次mysql_connect() 在 PHP 7.0+ 中已被彻底移除,必须改用 mysqli 或 PDO;需显式设置 utf8mb4 字符集并使用预处理语句防止 SQL 注入。
mysql_connect() 已被彻底移除,PHP 7.0+ 无法使用
PHP 7.0 起,mysql_* 系列函数(如 mysql_connect()、mysql_query())已被完全删除,不是“不推荐”,而是**根本不存在**。如果你在 PHP 7.x 或 8.x 环境下看到 Fatal error: Uncaught Error: Call to undefined function mysql_connect(),这就是原因。
这不是配置问题,也不是 extension 没开启——它连源码里都没了。强行降级到 PHP 5.6 并非可行方案,该版本早已停止安全更新,生产环境严禁使用。
替代方案只有两个:mysqli 或 PDO
必须改用现代扩展。两者都支持面向对象和过程式调用,但行为细节差异明

-
mysqli是 MySQL 官方维护的专用扩展,语法更贴近老mysql_*风格,迁移成本略低; -
PDO是通用数据库抽象层,支持 MySQL、PostgreSQL、SQLite 等多种驱动,参数绑定更安全,是长期项目首选。
示例对比(连接本地 test 库):
// mysqli 过程式
$conn = mysqli_connect('localhost', 'root', 'pass', 'test');
if (!$conn) die('连接失败:' . mysqli_error($conn));
// PDO(推荐用 try/catch + 异常模式)
try {
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'root', 'pass', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);
} catch (PDOException $e) {
die('连接失败:' . $e->getMessage());
}
字符集必须显式声明,否则中文乱码大概率发生
老 mysql_* 扩展默认不设字符集,靠 MySQL 服务端配置兜底,极易出错。新扩展必须主动指定:
-
mysqli:连接后立即执行mysqli_set_charset($conn, 'utf8mb4'),或在 DSN 中加;charset=utf8mb4(仅限面向对象方式); -
PDO:必须在 DSN 中写明charset=utf8mb4,且不能只写utf8(MySQL 的utf8实际是utf8mb3,不支持 emoji); - 同时确认 MySQL 服务端
character_set_server和库/表的COLLATE也设为utf8mb4_unicode_ci级别。
查询语句不能再直接拼接变量,SQL 注入风险极高
老写法 "SELECT * FROM user WHERE id = " . $_GET['id'] 在新扩展中依然能运行,但等于裸奔。必须用预处理:
-
mysqli:用mysqli_prepare()+mysqli_stmt_bind_param(); -
PDO:用prepare()+execute(),支持命名参数(:id)和问号占位符; - 即使只是整数 ID,也别信“过滤 intval 就安全”——类型绕过、逻辑漏洞仍存在,预处理是唯一可靠路径。
老代码里满屏的 mysql_real_escape_string() 全部删掉,它对新扩展无效,且本身防不住所有注入场景。
真正卡住人的往往不是语法转换,而是隐性依赖:比如某些老 CMS 的数据库类封装了 mysql_* 调用,直接替换函数名会崩;或者错误处理逻辑硬编码了 mysql_error() 返回格式。这类情况必须逐层检查调用链,不能只改入口连接代码。
# mysql
# php
# cms
# 编码
# 中文乱码
# sql
# 面向对象
# 封装
# select
# Error
# mysqli
# pdo
# undefined
# function
# 对象
# sqlite
# postgresql
# 数据库
# 已被
# 服务端
# 移除
# 这就是
# 你在
# 设为
# 这类
# 这不是
# 不存在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
EditPlus中的正则表达式实战(6)
,怎么在广州志愿者网站注册?
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
潮流网站制作头像软件下载,适合母子的网名有哪些?
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
Laravel如何自定义分页视图?(Pagination示例)
如何在阿里云虚拟主机上快速搭建个人网站?
微信小程序 canvas开发实例及注意事项
如何在橙子建站中快速调整背景颜色?
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
Laravel怎么调用外部API_Laravel Http Client客户端使用
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何用已有域名快速搭建网站?
EditPlus中的正则表达式 实战(2)
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
JavaScript如何实现路由_前端路由原理是什么
Android使用GridView实现日历的简单功能
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
Laravel如何配置Horizon来管理队列?(安装和使用)
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
如何正确下载安装西数主机建站助手?
如何安全更换建站之星模板并保留数据?
香港服务器租用费用高吗?如何避免常见误区?
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
如何选择可靠的免备案建站服务器?
Laravel如何实现一对一模型关联?(Eloquent示例)
高端建站三要素:定制模板、企业官网与响应式设计优化
Laravel怎么实现模型属性的自动加密
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
如何快速启动建站代理加盟业务?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Laravel如何实现模型的全局作用域?(Global Scope示例)
公司网站制作需要多少钱,找人做公司网站需要多少钱?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
javascript基于原型链的继承及call和apply函数用法分析
Python图片处理进阶教程_Pillow滤镜与图像增强
如何撰写建站申请书?关键要点有哪些?
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
Internet Explorer官网直接进入 IE浏览器在线体验版网址
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
如何获取PHP WAP自助建站系统源码?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
如何在不使用负向后查找的情况下匹配特定条件前的换行符
什么是javascript作用域_全局和局部作用域有什么区别?
制作旅游网站html,怎样注册旅游网站?
如何快速选择适合个人网站的云服务器配置?

