0

私は奇妙な問題に遭遇しました。私は自分でそれを修正しましたが、なぜそれが起こるのかまだ興味があります. ここ StackOverflow の誰かがそれを確認できるかもしれないと思いました。私は自分のプロジェクトで次のようなものを使用しています:

$users = mysql_query("select * from user where user_id = '$_GET[id]'") or die("Connection Error");
while($user = mysql_fetch_array($users))
$user_activated = $user['user_activated'];

// For testing purpose. This is not my original code but it's in the same sequence.
while($user = mysql_fetch_array($users))
echo "Test".

エコー「テスト」は決して起こりません。$users 配列に何か変更が必要ですか? それとも自動的に消去されますか?私はそのようなものに出くわしたことはありません。誰かがこれにいくつかの直感を提供できますか?

ありがとうございました!

4

3 に答える 3

1

結果セットを消費するとmysql_、ポインターはレコードセットの最後になります。ポイントが結果の最後にあるため、イテレータに再度消費するように依頼すると、反復は発生しません。結果セットの先頭でポインタをリセットするには

mysql_data_seek($rs, 0);
于 2013-07-30T14:07:46.720 に答える
1

行をフェッチしているときに、リソース内のどこにいるかを追跡する内部ポインターがあります。最後までやり遂げたら、 を使用mysql_data_seek()して最初に戻り、フェッチをもう一度確認できるようにする必要があります。

ただし、データを再度引き出す必要がある場合は、次のように、最初に配列に格納することをお勧めします。

while($user = mysql_fetch_array($users)) {
    $users_array[] = $user;
}

$usersその後、リソースから再フェッチすることなく、必要なだけ配列を調べることができます。

ちなみに、PDO にも切り替える必要があります。非推奨ではないことに加えて、メソッドにもアクセスできますfetchAll()

于 2013-07-30T14:06:48.277 に答える
1

レコードは削除されませんが、mysql_fetch_array はポインターを使用して反復します。次のように mysql_data_seek を使用してポインターを初期結果にリセットできます。

$users = mysql_query("select * from user where user_id = '$_GET[id]'") or die("Connection Error");
while($user = mysql_fetch_array($users))
$user_activated = $user['user_activated'];
// reset the pointer
mysql_data_seek($users,0) 

// For testing purpose. This is not my original code but it's in the same sequence.
while($user = mysql_fetch_array($users))
echo "Test".
于 2013-07-30T14:18:16.517 に答える