Foros del Web » Programando para Internet » PHP »

Como guardar el resultset

Estas en el tema de Como guardar el resultset en el foro de PHP en Foros del Web. Quisiera hacer lo mismo que hago en .NET en el cual guardo el resultado de una consulta en un objeto y este lo puedo recuperar ...
  #1 (permalink)  
Antiguo 28/03/2006, 11:38
Avatar de ciberpato  
Fecha de Ingreso: agosto-2004
Mensajes: 142
Antigüedad: 13 años, 3 meses
Puntos: 1
Pregunta Como guardar el resultset

Quisiera hacer lo mismo que hago en .NET en el cual guardo el resultado de una consulta en un objeto y este lo puedo recuperar en cualquier momento sin tener que ejecutar nuevamente la consulta. Pregunta? es posible esto en PHP y como se puede hacer?......de ante manos agradezco su colaboración.
  #2 (permalink)  
Antiguo 28/03/2006, 14:57
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Podrias guardar el resulset en una variable de sesion.
  #3 (permalink)  
Antiguo 28/03/2006, 17:01
Avatar de ciberpato  
Fecha de Ingreso: agosto-2004
Mensajes: 142
Antigüedad: 13 años, 3 meses
Puntos: 1
claudiovega.... gusto de saludarte.....pues aquí estoy de nuevo aporreandome con el php. Bueno te cuento tengo una clase proxy donde ejecuto y hago las consultas a la base de datos en ella existe una funcion consulta donde genera el $resultset y genera un return $resultset . En la página en cuestión ... tengo al comienzo <?session_register("resultset") ?>
el problema es que en archivo de sessiondata del directorio php se genera el la variable resultset pero sin datos osea no registra los datos. Por lo anterior la pagina al ejecutarse por primera vez muestra los datos producto del return $resultset de la clase proxy explicada arriba.... al hacer submit a la misma página pero esta vez no llamo a la función consulta del proxy; ya que se supone que en la sessiondata quedó registrada esta variable $resultset me produce el error "supplied argument is not valid MySql result resource en ..."
tipico cuando no se tiene datos el $resultset. Espero haberme explicado bien para no ponerte el script que creo que no es necesario para este caso a lo mejor no estoy utilizando bien esta variable que es un arreglo y no puede ser manejado como una variable comun y corriente , ya que las otras variables que usan session se registran sin problemas pero no así el el resultado de una consulta .... corrígeme si me equivo.
  #4 (permalink)  
Antiguo 28/03/2006, 20:08
Avatar de ciberpato  
Fecha de Ingreso: agosto-2004
Mensajes: 142
Antigüedad: 13 años, 3 meses
Puntos: 1
Para simplificar lo anterior, te muestro un script de ejemplo que tampoco me funciona, en el puedes ver que cuando ejecuto Repetir me arroja el típico mensaje "mysql_fetch_row(): supplied argument is not a valid MySQL ", la primera vez funciona, pero al repetir el flag evita que se vuelva a ejecutar la consulta, pero no reconoce los argumentos de $resultset.

<?php

session_register("resultset");

if (!isset($_REQUEST["flag"])) {
mysql_connect("localhost","root","");
$sql="SELECT * FROM categorias WHERE IDIOMA__CAT='E'";
$resultset=mysql_db_query("valdivieso",$sql);
}

while($row=mysql_fetch_row($resultset)) {
echo $row[1]."-".$row[2]."<br>";
}

?>
<a href="prueba.php?flag=1">Repetir</a>

Te agradecería indicar donde está mi falla.

Última edición por ciberpato; 28/03/2006 a las 20:30
  #5 (permalink)  
Antiguo 29/03/2006, 09:44
Avatar de ciberpato  
Fecha de Ingreso: agosto-2004
Mensajes: 142
Antigüedad: 13 años, 3 meses
Puntos: 1
Hay alguien que me pueda indicar donde está el problema......please
  #6 (permalink)  
Antiguo 29/03/2006, 12:00
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
1) No veo la llamada a session_start(), la cual es necesario colocar en todos los script que acceden a datos de la sesion.
2) La notación que usas para las sesiones está obsoleta y tambien lo está lo de seleccionar la BD, mejor usar esto:

Código PHP:
<?php
   session_start
();
   if (!isset(
$_REQUEST["flag"])) {
      
mysql_connect("localhost","root","");
      
mysql_select_db("valdivieso");
      
$sql="SELECT * FROM categorias WHERE IDIOMA__CAT='E'";
      
$resultset=mysql_query($sql);
      
//compruebo que el query traiga datos
      
if(isset($resultset) && mysql_num_rows($resultset)>0) {
         
//asigno el resultset a la variable de sesion
         
$_SESSION['resultset']=$resultset;
         while(
$row=mysql_fetch_row($resultset)) {
            echo 
$row[1]."-".$row[2]."<br>";
         }
      }
   }
?>
  #7 (permalink)  
Antiguo 29/03/2006, 12:14
Avatar de ciberpato  
Fecha de Ingreso: agosto-2004
Mensajes: 142
Antigüedad: 13 años, 3 meses
Puntos: 1
claudio gracias por tu atención.... pero probé lo indicado pero sigue sin funcionar la variable que se registra en la sessiondata del php despues de ejecutar lo anterior es : resultset|i:0; lo que indica que creo la variable session y no registra datos. la verdad me he rebanado la cabeza y no logro ver donde está el problema.
  #8 (permalink)  
Antiguo 29/03/2006, 13:33
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
He leido que al parecer no se puede, dado que no es posible serializar el resultset para que pueda ser asignado a una variable de sesion.
Otra forma sería crear un array bidimensional al recorrer los datos del resultset. Este array si puede ser asignado a una variable de sesion.
  #9 (permalink)  
Antiguo 29/03/2006, 13:45
Avatar de ciberpato  
Fecha de Ingreso: agosto-2004
Mensajes: 142
Antigüedad: 13 años, 3 meses
Puntos: 1
Gracias claudio, para finalizar me podrías decir donde encontrar un arreglo bidireccional que cumpla con lo requerido, es decir sería algo así $a [1][0] en el fondo hacer una matriz, te pido esto porque se me acabó el tiempo para experimentar y un ejemplo simple para salir de este cacho. un saludo
  #10 (permalink)  
Antiguo 29/03/2006, 18:36
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Prueba esto:

Código PHP:
<?php
    $result
=mysql_query($sql);
    if(isset(
$result))
    {
        
$myresult=array();
        
$numcampos=mysql_num_fields($result);
        
$numfilas=mysql_num_rows($result);
        for(
$i=0;$i<$numfilas;$i++)
        {
            for(
$j=0;$j<$numcampos;$j++)
            {
                
$myresult[$i][$j]=mysql_result($result,$i,$j);
            }
        }
        
$_SESSION['resultset']=$myresult;
    }
?>
  #11 (permalink)  
Antiguo 29/03/2006, 22:10
Avatar de ciberpato  
Fecha de Ingreso: agosto-2004
Mensajes: 142
Antigüedad: 13 años, 3 meses
Puntos: 1
Claudio el código funciona bien solo tendría que agregarle los nombre de campos en la fila 0, la verdad has sido de gran ayuda en este día ya que me encontraba entre la espada y la pared con respecto al tiempo. Gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:00.