← PHP 变量与作用域:从声明规则到三种可见范围 没有下一篇了 →

PHP MySQL数据库连接:从mysqli_connect开始

原创 2026-05-12 PHP 已有人查阅

从 PHP 5.5 版本开始,mysql_connect() 这个老牌数据库连接函数被正式标记为弃用(deprecated),在 PHP 7.0 中被彻底移除。如果你还在维护一些老旧代码,或者在一些旧教程里看到这个函数,需要知道它已经不能用了。现在连接 MySQL 数据库有两条路可以走:mysqli_connect() 和 PDO

本节我们聚焦在 mysqli_connect() 上,这是 MySQL 官方推荐的改进版扩展,提供了面向过程和面向对象两套接口,性能上比老版本的 mysql 扩展好不少。

为什么 mysql_connect 被淘汰?

简单回顾一下,老旧的 mysql 扩展存在几个比较明显的问题:

  • 缺乏预处理语句(Prepared Statement)的原生支持,防 SQL 注入只能靠手动转义,容易遗漏。

  • 不支持 MySQL 5.1 之后的新特性,比如事务、存储过程的完整支持。

  • 代码维护停滞,安全性更新缺失。

相比之下,mysqli(MySQL Improved)扩展补上了这些短板,支持预处理、事务、多语句执行,同时兼容老代码的迁移。PDO 则是更通用的数据库抽象层,一套接口可以切换多种数据库。如果你的项目只用 MySQL 且不需要切换数据库,mysqli 是个轻量又直接的选择;如果未来有可能换数据库,或者需要更灵活的异常处理,PDO 更值得考虑。

mysqli_connect():建立连接

mysqli_connect() 用于和 MySQL 数据库服务器建立连接。连接成功时返回一个连接资源(resource),失败时返回 null

函数原型

resource mysqli_connect(server, username, password, database, port)

参数说明:

  • server:数据库服务器地址,通常是 localhost 或 IP 地址。可以附带端口号,比如 localhost:3306

  • username:数据库用户名。

  • password:用户对应的密码。

  • database(可选):要选择的默认数据库名。

  • port(可选):数据库服务端口,默认是 3306

基础连接示例

一个最简化的连接流程:连接、检查、关闭。

$host = 'localhost:3306';
$user = 'root';
$pass = '';

$conn = mysqli_connect($host, $user, $pass);

if (!$conn) {
    die('Could not connect: ' . mysqli_connect_error());
}

echo 'Connected successfully';

mysqli_close($conn);

输出:

Connected successfully

这里用 mysqli_connect_error() 获取具体的错误信息,比直接用 mysqli_error() 更准确——后者需要传入连接资源,连接失败时资源本身可能是 null,容易引发二次错误。这是一个细节但值得记住的习惯,我用 mysqli_connect_error() 基本不会回头换别的写法。

mysqli_close():断开连接

数据库操作完成后,显式关闭连接是一个好习惯——虽然 PHP 在脚本执行完毕时会自动关闭所有打开的连接,但在长脚本或频繁建立连接的场景下,手动 mysqli_close() 能及时释放数据库服务器上的连接资源。

bool mysqli_close(resource $resource_link)

它接受一个连接资源作为参数,关闭成功返回 true,失败返回 false

一个更完整的实战示例

实际项目里,你通常需要同时指定数据库名,并且做错误处理。下面这个例子连接到一个名为 code_learning 的数据库,并处理连接失败的情况:

$host = 'localhost';
$user = 'root';
$pass = '';
$dbname = 'code_learning';

// 建立连接并选择数据库
$conn = mysqli_connect($host, $user, $pass, $dbname);

if (!$conn) {
    die('Connection failed: ' . mysqli_connect_error());
}

echo 'Successfully connected to database: ' . $dbname;

// 后续数据库操作写在这里

mysqli_close($conn);

如果你的连接信息(主机、用户名、密码、数据库名)需要频繁修改,建议把它们定义成常量或放在配置文件里统一管理,而不是散落在每个连接脚本中。这个习惯在项目变大后会帮你省很多维护精力。

连接时的常见问题排查

在使用中,连接失败大多集中在下面几个原因:

  • 用户名或密码错误:确认 $user 和 $pass 是否正确,MySQL 用户是否有对应主机的访问权限。

  • 服务器地址错误localhost 和 127.0.0.1 在 MySQL 中可能指向不同的 socket 连接方式,遇到问题时可以两个都试试。

  • 端口号错误:如果 MySQL 用了非默认端口,必须显式指定,如 localhost:3307

  • 防火墙或 SELinux 阻拦:尤其在云服务器或 VPS 环境下,检查 3306 端口是否对应用层开放。

  • MySQL 服务未启动:命令行输入 mysql --version 或用 systemctl status mysql 确认服务状态。

本节课程知识要点

  • PHP 5.5 起弃用 mysql_connect(),PHP 7.0 移除,目前应使用 mysqli_connect() 或 PDO 连接 MySQL。

  • mysqli_connect() 成功时返回连接资源,失败返回 null,建议使用 mysqli_connect_error() 获取错误信息。

  • 数据库操作结束后使用 mysqli_close() 显式关闭连接,有助于及时释放资源。

  • 连接失败常见原因包括用户名密码错误、地址端口不对、防火墙拦截、MySQL 服务未启动等,排查时按这个顺序逐一检查。

← PHP 变量与作用域:从声明规则到三种可见范围 没有下一篇了 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号