PHP 8.0+ 已移除 mysql_connect(),必须改用 mysqli 或 PDO;推荐 PDO(跨库、命名参数、异常模式)或 mysqli 面向对象(预处理、异常支持);务必设置 utf8mb4 字符集和错误报告机制。

PHP 8.0+ 已彻底移除 mysql_connect() 等旧函数,直接用会报 Fatal error: Uncaught Error: Call to undefined function mysql_connect() —— 必须改用 mysqli 或 PDO。
用 mysqli 面向过程方式连接(适合快速脚本)
这是最接近老式 mysql_* 写法的替代方案,改动小、上手快,但不推荐用于新项目。
-
mysqli_connect()第一个参数是主机名(如'localhost'),不是'127.0.0.1'—— 后者可能触发 TCP 连接而非 socket,某些配置下反而连不上 - 连接后务必检查返回值:
if (!$conn) { die('连接失败:' . mysqli_connect_error()); } -
中文乱码?在连接后立即执行
mysqli_set_charset($conn, 'utf8mb4');(注意是utf8mb4,不是utf8)
```php
$conn = mysqli_connect('localhost', 'root', 'password', 'testdb', 3306);
if (!$conn) {
die('连接失败:' . mysqli_connect_error());
}
mysqli_set_charset($conn, 'utf8mb4');
```用 mysqli 面向对象方式(推荐)
更清晰、支持预处理语句防 SQL 注入,且能自然捕获异常(配合 mysqli_report)。
- 构造时传参顺序和面向过程一致,但需用
new mysqli(...) - 连接失败时默认不抛异常,要先开启报告:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); - 数据库名可为空,后续用
$mysqli->select_db('dbname')切换,适合多库场景
```php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'root', 'password', 'testdb', 3306);
$mysqli->set_charset('utf8mb4');
```用 PDO 连接(最灵活,跨数据库友好)
如果你未来可能换 PostgreSQL 或 SQLite,或者需要命名参数(:name)、事务嵌套控制,PDO 是首选。
Difeye是一款超轻量级PHP框架,主要特点有: Difeye是一款超轻量级PHP框架,主要特点有: ◆数据库连接做自动主从读写分离配置,适合单机和分布式站点部署; ◆支持Smarty模板机制,可灵活配置第三方缓存组件; ◆完全分离页面和动作,仿C#页面加载自动执行Page_Load入口函数; ◆支持mysql,mongodb等第三方数据库模块,支持读写分离,分布式部署; ◆增加后台管理开发示例
立即学习“PHP免费学习笔记(深入)”;
- DNS 字符串格式为
mysql:host=localhost;dbname=testdb;charset=utf8mb4——charset必须写在 DNS 里,单独调exec("SET NAMES utf8mb4")不可靠 - 错误模式设为
PDO::ERRMODE_EXCEPTION,否则query()失败只返回false,不报错 - 密码等敏感信息别硬编码,应从环境变量读取:
$_ENV['DB_PASSWORD']或getenv('DB_PASSWORD')
```php
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
$pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8mb4', 'root', 'password', $options);
```真正容易被忽略的是字符集和错误报告机制——连得上不代表存得对、查得准;没开异常模式,PDO 和 mysqli 都可能静默失败。别只抄代码,先确认你用的 PHP 版本、MySQL 配置、以及是否真需要持久连接(PDO::ATTR_PERSISTENT => true 在 CLI 下反而有害)。










