PHP 连接 MySQL 核心函数详解与操作指南

山间有风
山间有风
发布时间:2026-10-15 | 4人浏览过
原创

本文梳理了 PHP 传统扩展中与 MySQL 数据库交互的关键函数,包括连接管理、数据查询结果提取及元信息查询。通过解析各函数的参数与作用,结合代码实例展示如何完成从建立链接到读取数据的全过程,适合回顾旧版 PHP 代码逻辑或维护历史项目。

建立与关闭数据库连接

在操作 MySQL 数据库前,首先需要建立连接。PHP 提供了两种主要的连接方式:临时连接和持久连接,以及在操作结束后关闭连接的方法。

第1步:使用 mysql_connect 建立临时连接

目的:创建一个与 MySQL 服务器的非持久化连接。脚本执行结束或调用 close 后连接断开,资源释放。

  • 入口/动作:调用 mysql_connect() 函数。
  • 重要参数:
    • hostname[:port][/path/to/socket]:服务器地址,可选端口或 Socket 路径。
    • username:用户名,默认为 'localhost'。
    • password:密码。
  • 注意事项:所有参数均为可选。若需同时连接多个不同服务器,必须捕获并保存返回的资源 ID,以便后续操作指定连接。
$link1 = @mysql_connect("server1", "user", "password")
or die("Could not connect to server 1!");
$link2 = @mysql_connect("server2", "user", "password")
or die("Could not connect to server 2!");

第2步:使用 mysql_pconnect 建立持久连接

目的:建立一个持久连接(Persistent Connection)。如果存在已有的相同连接,则复用;否则创建新连接。连接会放入池中,随 PHP-FPM 或 Apache 进程存活,无需显式关闭。

  • 动作:调用 mysql_pconnect(),参数结构与 mysql_connect 一致。
  • 优势:减少频繁建连开销,适合高并发且对延迟敏感场景。

第3步:关闭连接 mysql_close

目的:主动关闭指定的数据库连接。若不指定参数,默认关闭最近打开的连接。

  • 动作:mysql_close($link_id)。
  • 说明:通常不是必须的,因为脚本结束时会自动清理,但在长生命周期或连接数受限环境中建议显式关闭。

选择目标数据库

连接服务器后,需要选定要操作的具体数据库。

第4步:执行 mysql_select_db

  • 作用:选择当前会话操作的默认数据库。
  • 用法:mysql_select_db("db_name", $link_id)。
  • 返回值:成功返回 true,失败返回 false。

执行 SQL 查询

主要通过 mysql_query 执行 SQL 语句,返回结果集资源或布尔值。

第5步:使用 mysql_query 执行常规查询

  • 作用:向服务器发送 SQL 字符串并执行。
  • 返回:SELECT 等查询返回结果集资源;INSERT/UPDATE/DELETE 返回 true/false。
$query = "SELECT id, name FROM product ORDER BY name";
$result = mysql_query($query) or die("Query failed: " . mysql_error());

第6步:使用 mysql_db_query 一键选择并查询(不推荐)

说明:mysql_db_query(database, query) 等效于先调用 select_db 再 query。由于封装了隐式状态切换,易引发混乱,建议分开执行以提高代码可读性。

获取和显示数据结果集

查询成功后,需要从结果集中逐行提取数据。PHP 提供了多种提取方式,适用于不同数据结构需求。

第7步:逐个字段提取 mysql_result

  • 适用场景:只需获取某一行的特定列,或进行随机访问。
  • 缺点:效率较低,每次调用都可能在内部重新定位游标,不适合大规模遍历。
  • 用法:mysql_result($result, row_index, field_name_or_offset)。

第8步:逐行提取为数组 mysql_fetch_row / mysql_fetch_assoc / mysql_fetch_array

  • mysql_fetch_row:返回数值索引数组。while(list($id, $name) = mysql_fetch_row($res)) { ... }。
  • mysql_fetch_assoc:返回关联数组(字段名作为键)。等价于 mysql_fetch_array($res, MYSQL_ASSOC)。
  • mysql_fetch_array:支持返回混合数组(含数字索引和关联键),可通过 MYSQL_NUM, MYSQL_ASSOC, MYSQL_BOTH 控制返回类型。
$query = "SELECT id, name FROM product";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo $row['name'] . " (ID: " . $row['id'] . ")
"; }

第9步:逐行提取为对象 mysql_fetch_object

  • 作用:将每一行数据转换为一个对象,属性名为字段名。
  • 用法:$row = mysql_fetch_object($result); $row->name;。

记录计数与元数据获取

在处理完数据集后,常需了解受影响行数或获取库/表信息。

第10步:获取记录数量 mysql_num_rows / mysql_affected_rows

  • mysql_num_rows:仅适用于 SELECT 查询,返回结果集中的总行数。
  • mysql_affected_rows:适用于 INSERT, UPDATE, DELETE,返回受影响的行数。

第11步:获取库和表清单

  • mysql_list_dbs:列出服务器上该用户有权访问的所有数据库。
  • mysql_list_tables:列出指定数据库下的所有表。
  • 辅助函数:mysql_db_name() 和 mysql_tablename() 用于从上述列表资源中按索引提取具体名称。

总结与重要提示

以上函数构成了 PHP 早期版本操作 MySQL 的基础体系。它们直观地展示了“连接-选库-查询-提取”的标准工作流。然而,mysql_*` 系列函数在 PHP 5.5.0 中已被废弃,并在 PHP 7.0.0 中被彻底移除。

现代 PHP 开发应强烈推荐使用以下替代方案:

  1. PDO (PHP Data Objects):提供统一的接口,支持多数据库驱动,具备更好的安全性和预处理语句支持。
  2. MySQLi:专为 MySQL 设计的面向对象和过程化接口,性能优异,支持事务和多语句。

如果您是接手遗留系统代码,理解上述函数至关重要;如果是新建项目,请直接从 PDO 或 MySQLi 开始。

以上就是 PHP 操作 MySQL 核心函数的详细内容,更多关于 PHP 数据库交互的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表