首次使用后mysql_query的结果被删除了吗?

时间:2013-07-30 14:02:22

标签: php mysql

我遇到了一个奇怪的问题。我自己修好了,但我仍然很好奇为什么会这样。我以为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数组是否应该发生任何变化?还是会自动删除?我从未遇到任何类似的东西。任何人都可以提供一些直觉吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

有一个内部指针可以在您获取行时跟踪资源的位置。一旦你完成它,你必须使用mysql_data_seek()回到开头,并能够再次查看。

但是,如果您需要再次提取数据,最好的办法是在第一次将数据存储到数组中,如下所示:

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

然后,您可以查看所有您想要的$users数组,而无需从资源中重新获取。

另外,您也应该切换到PDO。除了不被弃用之外,您还可以访问fetchAll()方法。

答案 1 :(得分:1)

mysql_使用结果集后,指针位于记录集的末尾。当你要求迭代器再次使用它时,因为该点在结果的末尾,所以不会发生迭代。在结果集开始时重置指针使用

mysql_data_seek($rs, 0);

答案 2 :(得分: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".