2010-06-04 22 views
11

si ...

$query = "SELECT col1,col2,col3 FROM table WHERE id > 100" 
$result = mysql_query($query); 

para esta acción:

while ($row = mysql_fetch_array($result)){ 
    .... 
} 

es esta haciendo 1 lazo (iterado x veces)?

y para éste:

$row = mysql_fetch_array($result) 
foreach($row as $r){ 
    ... 
} 

es esta haciendo bucles (2 x iterados veces)?

donde x es el número de resultados


EDIT:

ok gracias chicos, bien básicamente me formulé esta pregunta muy, muy mal.

en retrospectiva que debería haber sido

'does mysql_fetch_array() only return one row each time it is called'

que un momento feliz de que mi comprensión de mysql_fetch_array() fue v. Incorrectos!

gracias por su tiempo!

+0

No estoy seguro de cómo se lleva a cabo mysql_fetch_array(). está creando una matriz así que estoy pensando que debe ser un bucle. Tengo curiosidad sobre si * while ($ row = mysql_fetch_array ($ result)) * puede obtener manipulaciones, es decir str_irepalce() dentro de ese ciclo inicial – Haroldo

+0

+1 para aclarar –

Respuesta

21

I'm assuming mysql_fetch_array() perfroms a loop, so I'm interested in if using a while() in conjunction with it, if it saves a nested loop.

mysql_fetch_array sólo devuelve la siguiente fila del resultado y avanza el puntero interno. No es un bucle. (. Internamente se puede o no utilizar algunos de bucle en algún lugar, pero eso es irrelevante)

while ($row = mysql_fetch_array($result)) { 
    ... 
} 

Esto hace lo siguiente:

  1. mysql_fetch_array recupera y devuelve la siguiente fila
  2. la fila se asigna a $row
  3. la expresión se evalúa y si se evalúa como true, el contenido del bucle se ejecutan
  4. la pr ocedure comienza de nuevo
$row = mysql_fetch_array($result); 
foreach($row as $r) { 
    ... 
} 

Esto hace lo siguiente:

  1. mysql_fetch_array recupera y devuelve la siguiente fila
  2. la fila se asigna a $row
  3. foreach bucles sobre el contenido de la matriz y ejecuta el contenido del bucle tantas veces como elementos en la matriz

En ambos casos, mysql_fetch_array hace exactamente lo mismo. Solo tienes tantos bucles como escribes. Ambos constructos no hacen lo mismo sin embargo. El segundo solo actuará en una fila del resultado, mientras que el primero recorrerá todas las filas.

1

Depende de cuántas filas se devuelven en $results, y cuántas columnas hay en $row?

+1

filas múltiples, múltiples cols – Haroldo

1

Considerando que solo se devuelve una fila, solo se realizará un ciclo en ambos casos. Aunque verificará la condición de entrada del bucle dos veces en cada uno.

+1

ver otro comentario: filas múltiples, múltiples cols – Haroldo

1

Para el primero: su programa pasará por el bucle una vez por cada fila en el conjunto de resultados devuelto por la consulta. Puede saber de antemano cuántos resultados hay al usar mysql_num_rows().

Para la segunda: esta vez se está utilizando solamente una fila del conjunto de resultados y que está haciendo algo para cada una de las columnas . Eso es lo que hace la construcción de lenguaje foreach: pasa por el cuerpo del bucle para cada entrada en la matriz $row. El número de veces que el programa pasará por el ciclo es cognoscible por adelantado: pasará una vez por cada columna en el conjunto de resultados (que presumiblemente usted conoce, pero si necesita determinarlo puede usar count($row)).

+1

ah bien lo siento, no estoy siendo claro sobre esto, estoy buscando ** cuántos bucles ** no cuántas repeticiones del bucle – Haroldo

+0

En cada uno de sus ejemplos solo hay un bucle. Por otro lado, si tuviera que hacer 'while ($ row = mysql_fetch_array ($ result)) {foreach ($ row as $ r) {...}}' eso sería dos bucles, uno anidado dentro del otro. – Hammerite

+0

im no sugiriendo poner el foreach() dentro del while(), solo me pregunto si es igual de eficiente usar un while() en el fetch_array() como un bucle después con foreach() – Haroldo

1

La primera fila:

$result = mysql_query($query); 

retorno de recursos php db.

La segunda fila

while ($row = mysql_fetch_array($result)) 

Loops todos los registros devueltos por la consulta.

Use mysql_fetch_assoc en su lugar
En ese caso, la fila tiene pares clave => valor.
En el mientras que sólo hay que poner esto:
print_r($row) y comprenderá
Si utiliza mysql_fetch_assoc el formato de la fila será:

$row["column1_name"] = column1_value; 
$row["column2_name"] = column2_value; 

Para éste:

$row = mysql_fetch_assoc($result) 
foreach ($row as $columnName => $columnValue) { 
    ... 
} 

Se hará obtenga la primera fila de la consulta e iterará todas las columnas en el primer resultado de la consulta.

1
$query = "SELECT col1,col2,col3 FROM table WHERE id > 100" 
$result = mysql_query($query); 
if(mysql_num_rows($result)>0) 
{ 
while($row = mysql_fetch_array()) //here you can use many functions such as mysql_fetch_assoc() and other 
{ 
//It returns 1 row to your variable that becomes array and automatically go to the next result string 
    Echo $row['col1']."|".Echo $row['col2']."|".Echo $row['col2']; 
} 
} 
+0

ERROR:
Advertencia: mysql_num_rows() espera parámetro de 1 a ser de recursos, objeto dado en /opt/lampp/htdocs/MultiDatesPicker/getuser.php en la línea

1

Sí, mysql_fetch_array() sólo devolvió un resultado. Si desea recuperar más de una fila, debe poner la llamada a la función en un bucle while.

Dos ejemplos:

Esto sólo devolver la primera fila

$row = mysql_fetch_array($result); 

Esto devolverá una fila en cada bucle, hasta que no hay más filas están disponibles en el conjunto de resultados

while($row = mysql_fetch_array($result)) 
{ 
    //Do stuff with contents of $row 
} 
Cuestiones relacionadas