php 7.0起mysql_*函数已被彻底移除,调用将触发致命错误;必须改用mysqli或pdo扩展,并更新全部代码逻辑,同时确保php.ini启用对应扩展并重启服务。

PHP旧版MySQL扩展(mysql_*函数)在PHP 7.0起已被彻底移除,不再支持。它和mysqli、PDO不是简单“切换”,而是必须替换代码逻辑——因为mysql_*系列函数(如mysql_connect()、mysql_query())已从PHP核心中删除,任何调用都会导致致命错误(Fatal error: Uncaught Error: Call to undefined function mysql_connect())。
你需要做三件事:选替代方案、改代码、装对应扩展。
选对替代扩展
- ✅ 推荐用
mysqli(面向对象或过程式)或PDO(更通用,支持多种数据库) - ❌ 不要用已废弃的
mysql扩展(无法安装,PHP源码里已删) - ⚠️ 注意:
mysqlnd是 MySQL Native Driver,是底层驱动,不是你直接调用的扩展;mysqli和PDO_mysql都可基于它工作
改掉所有旧函数调用
比如这段旧代码:
$conn = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('test', $conn);
$result = mysql_query("SELECT * FROM users", $conn);
while ($row = mysql_fetch_assoc($result)) {
echo $row['name'];
}
要改成 mysqli(面向对象写法):
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
if ($mysqli->connect_error) die('连接失败: ' . $mysqli->connect_error);
$result = $mysqli->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
echo $row['name'];
}
或 PDO(更推荐,支持预处理防SQL注入):
try {
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'user', 'pass', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
foreach ($pdo->query("SELECT * FROM users") as $row) {
echo $row['name'];
}
} catch (PDOException $e) {
die("连接失败: " . $e->getMessage());
}
确保新扩展已启用
- 查看当前启用的扩展:
php -m | grep -E "(mysqli|pdo|pdo_mysql)" - 若缺失,安装方式取决于你的环境:
- CentOS/RHEL(yum):
yum install php-mysqlnd php-pdo(php-mysqli通常随php-mysqlnd自动装) - Ubuntu/Debian(apt):
apt install php-mysql php-pdo -
phpEnv / phpStudy:在软件设置中确认
mysqli和pdo_mysql已勾选启用
- CentOS/RHEL(yum):
- 检查
php.ini中是否取消注释:extension=mysqli extension=pdo extension=pdo_mysql
- 修改后重启Web服务(如
systemctl restart httpd或nginx+ PHP-FPM)
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











