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