martes, 17 de agosto de 2010

Recuperar posición puntero después de utilizar un conjunto de resultados en PHP

Esta es una forma práctica de recuperar una posición concreta o resetear complentamente un conjunto de resultados después de que estos ya han sido utilizados.

Por ejemplo, si recorremos el resultado de cualquier consulta con mysql_fetch_assoc() o mysql_fetch_array() cuando queramos volver a acceder a ese conjunto de resultados ya no estará disponible puesto que el puntero interno se situa en la última posición.

Con mysql_data_seek() podemos mover el puntero a la fila específicada para el identificador de resultado. Debemos indicar dos parámetros, el primero corresponde al resultado que proviene de una llamada a mysql_query() y el segundo es la posición o número de la fila deseada del nuevo resultado, la siguiente llamada a mysql_fetch_row() devolverá esa posición.

$conn = mysql_connect("localhost", "user", "pass")
  or die(mysql_error());
mysql_select_db("basedatos", $conn);
$result = mysql_query("SELECT * FROM tabla", $conn)
  or die(mysql_error());
//recuperamos por primera vez el conjunto de resultados
while ($row = mysql_fetch_assoc($result)) {
  foreach ($row as $name => $value) {
    $salida .= $name . ": " . $value;
  }
}
//ahora el puntero interno se encuentra al final
//por lo que si queremos recuperar nuevamente los
//valores de $result debemos mover de nuevo
//a la posición 0
mysql_data_seek($result, 0);
//ahora podemos volver a recorrer el conjunto de resultados
while ($row = mysql_fetch_assoc($result)) {
  print_r(mysql_fetch_assoc($result)); 
}