Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用mysqli_Data_seek丢失数据_Php_Mysqli - Fatal编程技术网

Php 使用mysqli_Data_seek丢失数据

Php 使用mysqli_Data_seek丢失数据,php,mysqli,Php,Mysqli,我运行一个查询,并使用下面的代码在其中一个字段中进行循环修改。我只需要修改后的号码一小段时间,不需要它返回数据库。这工作正常,并使用echos打印出预期值 while ($d1 = mysqli_fetch_array($d1_query)) { echo "Before: " . $d1['d1_name'] . ": " . $d1['d1_earn_rate'] . "<br>"; if ( $e1['e_id'] == $h1['e_id'] )

我运行一个查询,并使用下面的代码在其中一个字段中进行循环修改。我只需要修改后的号码一小段时间,不需要它返回数据库。这工作正常,并使用echos打印出预期值

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>";
}
while($d1=mysqli\u fetch\u数组($d1\u query))
{
echo“之前:”.$d1['d1_name'].:“$d1['d1_earn_rate'.]”,
”; 如果($e1['e_id']=$h1['e_id'])) $d1['d1收入率]=$d1['d1收入率]*1.2; echo“在:.$d1['d1_name']之后:”:“$d1['d1_earn_rate']”之后“

”; }
然后,我想计算结果子集的总和。我使用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'];
}
mysqli\u数据搜索($d1\u查询,0);
$counter=0;
而($counter<15)
{
$counter++;
$d1=mysqli\u fetch\u数组($d1\u query);
echo$d1['d1_name']。:“$d1['d1_earn_rate']。”
”; $total_earn_rate+=$d1['d1_earn_rate']; }
你似乎想得太深了。事情很简单:

  • MySQL服务器在其内存中保存一个结果集,即您之前查询的结果
  • mysqli\u fetch\u数组
    将数据从MySQL服务器拉入PHP内存并返回
  • 您正在将提取的数据分配给
    $d1
  • 您正在操作
    $d1
  • 重置结果集的MySQL内部指针并重复上述过程

您在任何时候都不会操作MySQL服务器持有的结果集,并且总是通过
mysqli\u fetch\u array
从所述MySQL结果集中重新提取数据。每次调用该函数时,都会从MySQL保存的结果集中获得未修改的数据。

不要使用该函数。改为学习数组。分配给
$d1
不会修改查询结果,它只是修改带有行副本的变量。您分配给
$d1
,修改
$d1
,然后再次分配给
$d1
。为什么您希望这些更改mysqli\u fetch\u数组返回的数据?!因此,如果我理解正确,mysqli_data_seek不会将计数器移回第0行。它实际上将指针移动到原始$d1[0]。当我进行修改时,我是针对字段变量的特定实例进行修改的,一旦我继续,它就会消失。如果我还记得我以前的C类的话,这和指针和内存有关。@常识-你似乎在关注我所有的问题。我发现你的评论太宽泛,没有什么帮助。一个更恰当(礼貌)的回答应该是。“此函数不适合在这种情况下使用。最好使用数组。”“请勿使用此函数”简短、近乎粗鲁,并且没有解释我不应使用它的原因。“改为学习数组”,虽然我可以推断这是不使用该函数的原因,但这也意味着我不知道数组,这是假定和粗鲁的。这是一个建设性的回答。谢谢你的明确回答。我不知道这一切,但这是有道理的,现在我明白了。