使用mysqli_data_seek丢失数据

时间:2014-06-13 07:18:04

标签: php mysqli

我运行一个查询,并使用下面的代码循环修改其中一个字段。我只需要很短的时间修改数字,不需要它回到数据库。这样可以正常工作,并使用回声打印出预期的值。

while ($d1 = mysqli_fetch_array($d1_query))
{
    echo "Before: " . $d1['d1_name'] . ": " . $d1['d1_earn_rate'] . "<br>";

    if ( $e1['e_id'] == $h1['e_id'] )
        $d1['d1_earn_rate'] =  $d1['d1_earn_rate'] * 1.2;

    echo "After: " . $d1['d1_name'] . ": " . $d1['d1_earn_rate'] . "<br><br>";
}

之后,我想计算结果子集的总和。我使用mysqli_data_seek将计数器重置为第一行,所以我可以遍历它。但是,当我这样做时,它会根据查询中的原始数字计算总数,而不是修改后的数字。

我之前使用过msqli_data_seek没有任何问题,但这是我第一次在尝试循环回来之前修改结果中的数据。我不明白为什么我会丢失数据。

mysqli_data_seek($d1_query,0);
$counter = 0;
while ($counter < 15)
{
    $counter++;
    $d1 = mysqli_fetch_array($d1_query);
    echo $d1['d1_name'] . ": " . $d1['d1_earn_rate'] . "<br>";
    $total_earn_rate += $d1['d1_earn_rate'];
}

1 个答案:

答案 0 :(得分:1)

你似乎在思考太深。问题很简单:

  • MySQL服务器在其内存中保存结果集,这是您先前查询的结果
  • mysqli_fetch_array将数据从MySQL服务器提取到PHP的内存中并将其返回
  • 您将获取的数据分配给$d1
  • 你正在操纵$d1
  • 重置MySQL的结果集内部指针并重复上述过程

在任何时候你都没有操纵MySQL服务器所拥有的结果集,而且你总是通过mysqli_fetch_array从所述MySQL结果集中重新提取数据。每次调用该函数时,您都将从MySQL持有的结果集中获取未修改的数据。