php数据库怎么进用mysql扩展进库_php老扩展连库法【教程】
技术百科
雪夜
发布时间:2026-01-26
浏览: 次 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() 返回格式。这类情况必须逐层检查调用链,不能只改入口连接代码。
# 这类
# 你在
# 移除
# 已被
# 不存在
# 这就是
# 设为
# Error
# 对象
# 编码
# 中文乱码
# 数据库
# function
# 封装
# select
# php
# mysql
# sql
# postgresql
# 这不是
# undefined
# pdo
# mysqli
# 面向对象
# cms
# 服务端
# sqlite
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 企业SEO优化选择网站建设模板的技巧
- c++中explicit(bool)的用法 c++
- 如何在Golang中处理二进制数据_Golang
- 本地php环境打开php文件直接下载_浏览器解析p
- MySQL 中使用 IF 和 CASE 实现查询字
- 如何在Golang中实现微服务负载均衡_Golan
- Win10如何备份注册表_Win10注册表备份步骤
- php怎么下载安装后无法解析php文件_服务器配置
- c++的mutex和lock_guard如何使用
- Win10如何卸载自带Edge_Win10彻底卸载
- c++怎么用jemalloc c++替换默认内存分
- Windows10系统怎么查看CPU核心数_Win
- php转mp4怎么保留字幕_php处理带字幕视频转
- Win11怎么设置闹钟_Windows 11时钟应
- Win11怎么更改电脑名称_Windows 11修
- c++的static关键字有什么用 静态变量和静态
- Win11怎么关闭小组件_Win11禁用任务栏天气
- Python模块的__name__属性如何由导入方
- Python装饰器复用技巧_通用能力解析【教程】
- Windows如何拦截腾讯视频广告_Windows
- C++如何使用std::transform批量处理
- Win11怎么关闭应用权限_Windows11相机
- php修改数据怎么改富文本_update更新htm
- Win11键盘快捷键大全_Windows 11常用
- Win11怎么更改任务栏位置_修改注册表将Win1
- Windows任务计划服务异常原因_任务调度失败的
- Python包结构设计_大型项目组织解析【指导】
- php本地部署后数据库连接报错_1045acces
- 如何在 Go 开发中正确处理本地包导入与远程模块路
- Win11怎么关闭自动更新 Win11永久关闭系统
- 如何在Golang中修改数组元素_通过指针实现原地
- 如何正确访问 Laravel 模型或对象的属性而非
- Go 中实现 Python urllib.quot
- Go语言中slice追加操作的底层共享机制解析
- Win11怎么关闭粘滞键_彻底禁用Windows
- c++中的Tag Dispatching是什么_c
- Win11怎样安装搜狗输入法_Win11安装搜狗输
- Win11怎么关闭搜索历史_Win11清除设备上的
- mac怎么分屏_MAC双屏显示与分屏操作技巧【指南
- Windows10无法连接到Internet_Wi
- MAC怎么在照片中添加水印_MAC自带编辑工具文字
- Win11怎么恢复出厂设置_Win11重置此电脑保
- Django 测试数据库表缺失与字段未创建问题的完
- Win11怎么关闭OneDrive同步_Win11
- 如何在 Go 中可靠地测试含 time.Time
- Linux怎么禁止Root用户远程登录_Linux
- c++怎么处理多线程死锁_c++ lock_gua
- Golang如何避免指针逃逸_Golang逃逸分析
- Win10电脑怎么设置休眠快捷键_Windows1
- MAC如何设置网卡MAC地址克隆_MAC终端修改物


QQ客服