2011-11-27 13 views
17

un simpleUso consulta mysql_fetch_array dos veces

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

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

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

El último tiempo() no funciona. He intentado ejecutar foreach ($ cosas como $ s) pero luego recibo un error de matriz no válida.

¿Cómo puedo usar la misma consulta dos veces?

+0

Creo que debe reiniciar la matriz hasta el comienzo antes de tratar de volver a utilizarla, ya que ha llegado al final desde el primer conjunto de resultados. –

+2

por favor, deje de usar las funciones de salida 'mysql_ *' y aprenda a usar [PDO] (http://php.net/pdo) y sentencias preparadas. –

Respuesta

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)){ 
# ... 
} 

debe hacer el truco

Otra forma es, por supuesto, para almacenar el resultado en una matriz y volver a utilizar esa

+3

'mysql_data_seek ($ cosas, 0);' Aquí está el manual: [mysql_data_seek function] (http://www.php.net/manual/en/function.mysql-data-seek.php) –

+0

sin palabras. .. thanx .. awesome :) –

0

ver la docs

supongo que es porque

Devuelve una matriz que corresponde a la fila recuperada y mo El indicador de datos internos está delante.

pienso mover el puntero de datos con mysql_data_seek() haría el trabajo pero creo que esto no es una buena manera, por lo general debe obtener los datos de la base de datos una vez y almacenarlos

+1

En realidad, el primer método que sugirió es la mejor opción. – Starx

+0

sí, lo sé, solo quería decir que es mejor usar el resultado una vez si es posible –

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

Si usuario "foreach" en lugar de "mientras que" no tendrá ningún problema y sin necesidad de mysqli_seek_data():

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

Aquí hay otra solución más simple:

$slq = "SELECT * FROM users"; 

$stuff1 = mysql_query($slq); 

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

$stuff2 = mysql_query($slq); 

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

Asigna el sql a una variable y llama a mysql varias veces.

no más mysql. use mysqli o pdo