如何用PHP MySQLi过程化方式获取行数及预处理语句中使用mysql_fetch_array()
解决MySQLi连接问题与过程化操作指南
看起来你重新捡起来Web开发技术时遇到了MySQLi的小麻烦,我来一步步帮你理清问题:
一、修复MySQLi数据库连接问题
你的连接代码片段没写完,先把完整的错误处理补全,同时排查常见的连接失败原因:
完整的连接代码示例
<?php $db_host = "localhost"; $db_user = "root"; $db_pass = ""; $db_name = "testdatabase"; // 创建连接 $dbc = mysqli_connect($db_host, $db_user, $db_pass, $db_name); // 检查连接(完整错误输出更利于排查) if (!$dbc) { die("连接失败: " . mysqli_connect_error()); } echo "数据库连接成功"; ?>
常见连接失败排查点
- 确认本地MySQL服务是否正在运行(比如XAMPP/WAMP的MySQL模块是否启动)
- 检查
root用户的密码是否正确(部分环境下root默认不是空密码,比如生产环境或某些集成包会默认设置密码) - 确认
testdatabase数据库是否已经通过phpMyAdmin或命令行创建 - 如果MySQL端口不是默认的3306,需要在连接时补充端口参数:
mysqli_connect($db_host, $db_user, $db_pass, $db_name, 3307)(根据实际端口调整)
二、过程化方式获取行数
分普通查询和预处理语句两种场景:
1. 普通查询获取行数
执行普通SELECT查询后,直接用mysqli_num_rows()获取行数:
// 示例:查询users表的总行数 $query = "SELECT * FROM users"; $result = mysqli_query($dbc, $query); if ($result) { $row_count = mysqli_num_rows($result); echo "表中总行数: " . $row_count; // 遍历结果集(用mysqli_fetch_array) while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { echo "用户名: " . $row['username']; } // 释放结果集资源 mysqli_free_result($result); } else { echo "查询失败: " . mysqli_error($dbc); }
2. 预处理语句获取行数
预处理语句需要先调用mysqli_stmt_store_result()把结果集存储到内存,才能用mysqli_stmt_num_rows()获取行数:
// 示例:预处理查询获取符合条件的行数 $stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE age > ?"); // 绑定参数("i"表示整数类型) mysqli_stmt_bind_param($stmt, "i", $age); $age = 18; mysqli_stmt_execute($stmt); // 必须先存储结果集,才能获取行数 mysqli_stmt_store_result($stmt); $row_count = mysqli_stmt_num_rows($stmt); echo "年龄大于18的用户数: " . $row_count; // 关闭预处理语句 mysqli_stmt_close($stmt);
三、预处理语句中使用类似mysql_fetch_array()的方法
注意:mysql_fetch_array()是已废弃的旧MySQL扩展函数,MySQLi预处理语句中要获取数组格式的结果,需要先通过mysqli_stmt_get_result()拿到结果集对象,再用mysqli_fetch_array()遍历:
$stmt = mysqli_prepare($dbc, "SELECT id, username FROM users WHERE age > ?"); mysqli_stmt_bind_param($stmt, "i", $age); $age = 18; mysqli_stmt_execute($stmt); // 获取结果集对象 $result = mysqli_stmt_get_result($stmt); // 用mysqli_fetch_array遍历(MYSQLI_BOTH同时返回索引和关联数组,也可指定MYSQLI_ASSOC/MYSQLI_NUM) while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { echo "ID: " . $row['id'] . ", 用户名: " . $row['username']; } // 释放资源 mysqli_free_result($result); mysqli_stmt_close($stmt);
内容的提问来源于stack exchange,提问作者SShah
相关产品推荐
相关产品推荐

