Php 使用mysqli_Data_seek丢失数据
我运行一个查询,并使用下面的代码在其中一个字段中进行循环修改。我只需要修改后的号码一小段时间,不需要它返回数据库。这工作正常,并使用echos打印出预期值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'] )
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服务器在其内存中保存一个结果集,即您之前查询的结果
将数据从MySQL服务器拉入PHP内存并返回mysqli\u fetch\u数组
- 您正在将提取的数据分配给
$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类的话,这和指针和内存有关。@常识-你似乎在关注我所有的问题。我发现你的评论太宽泛,没有什么帮助。一个更恰当(礼貌)的回答应该是。“此函数不适合在这种情况下使用。最好使用数组。”“请勿使用此函数”简短、近乎粗鲁,并且没有解释我不应使用它的原因。“改为学习数组”,虽然我可以推断这是不使用该函数的原因,但这也意味着我不知道数组,这是假定和粗鲁的。这是一个建设性的回答。谢谢你的明确回答。我不知道这一切,但这是有道理的,现在我明白了。