0 レビュー
1 回答
php-mysqli_data_seekを使用したデータ損失
クエリを実行し、以下のコードでフィールドの1つを変更してループします。変更した番号は短時間だけ必要で、データベースに戻る必要はありません。これは正しく機能し、エコーを使用すると期待値が出力されます。
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'];
}
わからない
0
レビュー
答え :
解決策:
あなたはここであまりにも深く考えているようです。問題は非常に簡単です:
- MySQLサーバーは、前のクエリの結果である結果セットをメモリに保持します
mysqli_fetch_array
は、MySQLサーバーからPHPのメモリにデータをプルして返します- フェッチしたデータを
$d1
に割り当てます
- 操作しているのは
$d1
- 結果セットのMySQLの内部ポインタをリセットし、上記のプロセスを繰り返します
MySQLサーバーによって保持されている結果セットを操作することはありません。また、
mysqli_fetch_array
を介してMySQL結果セットから常にデータを新たに取得します。その関数を呼び出すたびに、MySQLが保持する結果セットから変更されていないデータを取得します。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。