从 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 服务未启动等,排查时按这个顺序逐一检查。