2011-11-27 61 views
17

简单使用查询两次mysql_fetch_array

$stuff = mysql_query("SELECT * FROM users"); 

while($s = mysql_fetch_array($stuff)){ 
# .... 
} 

while($r = mysql_fetch_array($stuff)){ 
# ... 
} 

的最后一段时间()不工作。我曾尝试运行foreach($ stuff作为$ s),但后来我得到无效的数组错误。

我该如何使用相同的查询两次?

+0

我认为你需要重置数组到开始,然后再尝试重用它,因为你已经到达第一个结果集的末端。 –

+2

请停止使用outdate'mysql_ *'函数学习如何使用[PDO](http://php.net/pdo)并准备好语句。 –

回答

35
$stuff = mysql_query("SELECT * FROM users"); 

while($s = mysql_fetch_array($stuff)){ 
# .... 
} 
// add this line 
mysql_data_seek($stuff, 0); 

while($r = mysql_fetch_array($stuff)){ 
# ... 
} 

应该做的伎俩

另一种方法当然是你的结果存储在一个阵列和重用

+3

'mysql_data_seek($ stuff,0);' 这里是手册:[mysql_data_seek函数](http://www.php.net/manual/en/function.mysql-data-seek.php) –

+0

无字。 .. thanx ..超赞:) –

0

看到docs

我想这是因为

返回对应于提取的行的数组,并且mo前面的内部数据指针

我认为移动与mysql_data_seek(数据指针)将做的工作 但我认为这不是一个好办法,你应该平时获取从数据库中的数据一次,并存储它们

+1

其实,你建议的第一种方法是不错的选择。 – Starx

+0

是的我知道,我只是想说如果可能的话最好使用结果 –

2
 
$stuff = mysql_query("SELECT * FROM users"); 

while($s = mysql_fetch_array($stuff)){ 
# .... 
} 
mysql_data_seek($stuff, 0); 
while($r = mysql_fetch_array($stuff)){ 
# ... 
} 
//ref: http://www.php.net/manual/en/function.mysql-data-seek.php 
-1

如果您用户“的foreach”而不是“而”你不会有任何问题,无需mysqli_seek_data():

//1st loop : 
foreach($stuff as $row) 
{ 
    echo $row['...']; 
} 
... 
//2nd loop : 
foreach($stuff as $row) 
{ 
    echo $row['...']; 
} 
0

这里是另外一个简单的解决方案:

$slq = "SELECT * FROM users"; 

$stuff1 = mysql_query($slq); 

while($s = mysql_fetch_array($stuff1)){ 
# .... 
} 

$stuff2 = mysql_query($slq); 

while($r = mysql_fetch_array($stuff2)){ 
# ... 
} 

将sql分配给一个变量,并多次调用mysql。

没有更多的MySQL。使用mysqli或pdo