首页| 版块| 我的| 发帖| 消息
主题:关于$db->fetch_array() [电脑版]
zhangjingyu发表于 2026-06-19 11:03
$row = $db->fetch_array($query);这行代码请解释下

好的!让我详细解释 $row = $db->fetch_array($query); 这行代码。

📖 基本解释
这行代码的作用是:从查询结果中取出一行数据,并保存为数组形式。

🔍 详细拆解
1. $query
这是一个查询结果资源(result resource)

由之前的 $db->query("SELECT ...") 返回

它包含了从数据库查询到的所有数据,但不能直接使用,需要通过函数提取

2. $db->fetch_array()
这是数据库操作类的一个方法

作用:从查询结果资源中提取当前行的数据

每次调用会自动移动到下一行

3. $row
一个关联数组(或索引数组)

数组的键是字段名,值是对应的字段值

例如:$row['tid']、$row['ip']、$row['guishu']

💡 实际例子
示例代码
php
// 1. 执行查询
$query = $db->query("SELECT tid, ip, guishu FROM pw_ipdatabase WHERE ip='127.0.0.1'");

// 2. 提取数据
$row = $db->fetch_array($query);

// 3. 现在可以使用 $row 数组了
echo $row['tid'];      // 输出:100
echo $row['ip'];       // 输出:127.0.0.1
echo $row['guishu'];   // 输出:广东省深圳市
内存中的数据
假设数据库中有这样一条记录:

tid    ip    guishu
100    127.0.0.1    广东省深圳市
执行 $row = $db->fetch_array($query); 后,$row 变成了:

php
$row = array(
    'tid' => 100,
    'ip' => '127.0.0.1',
    'guishu' => '广东省深圳市'
);
📊 不同的提取方式
PHP中常见的几种提取方式:

1. fetch_array() - 返回关联数组 + 索引数组
$row = $db->fetch_array($query);
echo $row[0];        // 100(索引方式)
echo $row['tid'];    // 100(关联方式)

2. fetch_assoc() - 只返回关联数组
$row = $db->fetch_assoc($query);
echo $row['tid'];    // 100
echo $row[0];        // 报错!不能使用索引

3. fetch_row() - 只返回索引数组
$row = $db->fetch_row($query);
echo $row[0];        // 100
echo $row['tid'];    // 报错!不能使用字段名

4. fetch_object() - 返回对象
$row = $db->fetch_object($query);
echo $row->tid;      // 100(对象方式)
🔄 循环提取多条数据
当查询结果有多条记录时,通常用 while 循环:
// 查询多条记录
$query = $db->query("SELECT * FROM pw_ipdatabase WHERE ip='127.0.0.1'");

// 循环取出所有数据
while ($row = $db->fetch_array($query)) {
    echo $row['tid'] . "";
    echo $row['ip'] . "";
    echo $row['guishu'] . "";
}

// 执行过程:
// 第1次循环:取出第1行数据
// 第2次循环:取出第2行数据
// 第3次循环:取出第3行数据
// ...
// 直到没有数据时,fetch_array() 返回 false,循环结束
🎯 在你的代码中的实际应用
场景1:查询一条记录
// 查询IP是否存在
$query = $db->query("SELECT * FROM pw_ipdatabase WHERE ip='$ip' ORDER BY id DESC LIMIT 1");

if ($db->num_rows($query)) {
    // 有记录,提取数据
    $row = $db->fetch_array($query);
    
    // 现在可以使用 $row 了
    $guishu = $row['guishu'];
    $tid = $row['tid'];
    
    // 判断是否需要更新
    if ($row['tid'] == 0) {
下一页 (1/4)
回帖(2):
2楼:这些内容都是deepseek给出的,我也就是备份一下而已。(zhangjingyu)
1楼:谢谢大哥的详细教程!fetch_array 内部指针自动推进这个细节经常被忽略,记得之前用的时候确实踩 ..(BI4IVE)

全部回帖(2)» | 最新回帖