PHP 连接 MySQL 核心函数详解与操作指南
本文梳理了 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 开发应强烈推荐使用以下替代方案:
- PDO (PHP Data Objects):提供统一的接口,支持多数据库驱动,具备更好的安全性和预处理语句支持。
- MySQLi:专为 MySQL 设计的面向对象和过程化接口,性能优异,支持事务和多语句。
如果您是接手遗留系统代码,理解上述函数至关重要;如果是新建项目,请直接从 PDO 或 MySQLi 开始。
以上就是 PHP 操作 MySQL 核心函数的详细内容,更多关于 PHP 数据库交互的资料请关注本站其它相关文章!免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









