php 8.0+已彻底移除mysql_connect(),必须改用mysqli或pdo;面向过程用mysqli_connect()并检查返回值、设utf8mb4字符集;面向对象用new mysqli()并检查connect_errno;pdo需在dsn中指定charset=utf8mb4并启用pdo::errmode_exception。

PHP 8.0+ 已彻底移除 mysql_connect() 等旧函数,必须用 mysqli 或 PDO;若用老教程代码,会直接报 Fatal error: Uncaught Error: Call to undefined function mysql_connect()
用 mysqli 连接 MySQL(面向过程写法,适合快速上手)
这是最接近旧 mysql_* 风格的替代方案,语法简单,适合脚本或小项目。
-
mysqli_connect()返回连接资源,失败时返回false,必须显式检查 - 默认端口是
3306,如果 MySQL 在其他端口(如 Docker 映射为3307),必须传第 4 个参数:mysqli_connect($host, $user, $pass, $dbname, $port) - 中文乱码常见原因是没设置字符集,连接后立刻执行
mysqli_set_charset($conn, 'utf8mb4')(注意是utf8mb4,不是utf8)
```php
$conn = mysqli_connect('localhost', 'root', 'password', 'testdb');
if (!$conn) {
die('连接失败:' . mysqli_connect_error());
}
mysqli_set_charset($conn, 'utf8mb4');
```
用 mysqli 连接 MySQL(面向对象写法,推荐)
更健壮、支持预处理语句防 SQL 注入,是当前主流写法。
- 构造
new mysqli(...)时,若连接失败不会抛异常,而是把错误信息存在$mysqli->connect_error属性里 - 连接成功后仍需调用
$mysqli->set_charset('utf8mb4'),否则INSERT中文可能存成问号 - 如果 MySQL 服务未启动,会触发警告并返回空对象,
if (!$mysqli->connect_error)是错的判断方式——正确做法是先检查$mysqli->connect_errno是否为 0
```php
$mysqli = new mysqli('localhost', 'root', 'password', 'testdb', 3306);
if ($mysqli->connect_errno) {
die('连接失败:' . $mysqli->connect_error);
}
$mysqli->set_charset('utf8mb4');
```
用 PDO 连接 MySQL(支持多种数据库,适合中大型项目)
统一接口、原生支持预处理、异常模式更可控,但默认不抛异常,需手动开启。
- DSN 字符串格式固定:
mysql:host=localhost;dbname=testdb;charset=utf8mb4—— 注意charset必须写在 DSN 里,光靠setAttribute()不保险 - 默认
PDO::ATTR_ERRMODE是PDO::ERRMODE_SILENT,出错只设$pdo->errorInfo,要主动查;改成PDO::ERRMODE_EXCEPTION才会真正 throw 异常 - 如果 MySQL 用户没授权本地
localhost访问(比如只给了127.0.0.1),用localhost会连不上,此时换127.0.0.1或确认用户权限
```php
try {
$pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8mb4', 'root', 'password', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
} catch (PDOException $e) {
die('连接失败:' . $e->getMessage());
}
```
字符集、错误处理模式、主机地址解析(localhost vs 127.0.0.1)这三点,比“怎么写 connect 语句”更容易导致连接无声失败。调试时优先确认这三个地方。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











