在使用 PHP 进行 MySQL 数据库操作时,mysqli 扩展是最常用的工具之一。特别是在处理查询结果时,mysqli_result 对象、fetch_assoc() 方法以及 while 循环的配合使用,是一种高效且常见的遍历方式。本文将详细介绍如何正确使用它们,并给出注意事项和示例代码。
当你用 mysqli_query() 执行一个 SELECT 查询时,返回的结果是一个 mysqli_result 对象。这个对象包含了查询返回的所有行数据。要访问这些数据,你需要用专门的方法,比如 fetch_assoc()。
fetch_assoc() 是 mysqli_result 提供的方法,用于从结果集中取出下一行,并返回一个关联数组,数组的键是字段名,值是对应的字段值。每次调用会向下移动一行,直到没有更多行返回 null。
一般来说,我们会用一个 while 循环,结合 fetch_assoc(),逐行获取结果集中的数据。这是因为 fetch_assoc() 每次只返回一行,需要不断调用才能取完所有行。
示例代码:
<?php
// 连接数据库
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// 检查连接
if ($mysqli->connect_error) {
die('连接失败: ' . $mysqli->connect_error);
}
// 执行查询
$sql = "SELECT id, name, email FROM users";
$result = $mysqli->query($sql);
if ($result instanceof mysqli_result) {
// 遍历查询结果
while ($row = $result->fetch_assoc()) {
echo 'ID: ' . $row['id'] . '<br>';
echo '姓名: ' . $row['name'] . '<br>';
echo '邮箱: ' . $row['email'] . '<br>';
echo '<a href="https://m66.net/user/' . $row['id'] . '">查看详情</a><br><br>';
}
// 释放结果集
$result->free();
} else {
echo '查询失败: ' . $mysqli->error;
}
// 关闭连接
$mysqli->close();
?>
? 检查查询是否成功
在调用 $result->fetch_assoc() 之前,先确保 $result 确实是一个 mysqli_result 对象,而不是 false。
? 释放结果集
遍历完后,调用 $result->free() 释放资源,避免内存泄漏。
? 关闭数据库连接
使用完数据库后,调用 $mysqli->close() 关闭连接。
? 防止 SQL 注入
如果查询中涉及用户输入,强烈建议使用预处理语句 (prepare + bind_param) 而不是直接拼接字符串。