Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Duda con el uso de CLASS para mysql

Estas en el tema de Duda con el uso de CLASS para mysql en el foro de Frameworks y PHP orientado a objetos en Foros del Web. hola a todos les quiero preguntar algo a la gente con mas experiencia en php 5.x + mysql 5.x + POO, tengo una clase para ...
  #1 (permalink)  
Antiguo 19/08/2009, 09:30
 
Fecha de Ingreso: agosto-2009
Mensajes: 3
Antigüedad: 15 años, 4 meses
Puntos: 0
Pregunta Duda con el uso de CLASS para mysql

hola a todos

les quiero preguntar algo a la gente con mas experiencia en php 5.x + mysql 5.x + POO, tengo una clase para manejar mysql con SP pero cada vez que quiero usar la clase para leer diferentes SP tengo que hacerle un NEW si no me da error "Commands out of sync; you can't run this command now" supuestamente en POO se instancia una clase solo una vez y despues llamas a los metodos?

mi clase
Código PHP:
<?php  
    
class MyBD5
    
{  
     private 
$ID_BD;  

     
//Constructor
     
function __construct($host$bd$user$pass)
        {
         
$this->ID_BD mysqli_connect($host$user$pass$bd);  
         if (!
$this->ID_BD
         {
            
printf("Error de Conexion, Codigo: %s\n"mysqli_connect_error());
            exit;
         } 
     }

     
//Metodo Consultar query
     
public function Consultar($query)
     {    
       
$rs mysqli_query($this->ID_BD,$query);  
       if(!
$rs)
       {  
          echo 
'Sql Error: ' mysqli_error($this->ID_BD);  
          exit;  
       }  
       return 
$rs;   
     }  

    
//Metodo Resultado query
    
public function Registro($query)
    {   
       return 
mysqli_fetch_array($query);
    }  
  
    
//Metodo Libera
    
public function Libera($query)
    {
       
mysqli_free_result($query);
    }
    
    
//Destructor
    
public function __destruct() 
    {  
      
mysqli_close($this->ID_BD);
    }
}
?>
la uso asi
Código PHP:
    $d2= new MyBD5("localhost","atarilab","root","");
         
$c2=$d2->Consultar("call sp_mm_referencia(704)");
    while(
$r2 $d2->Registro($c2)){
                         echo (
$r2[5]."<br>");
    }
        
$d2= new MyBD5("localhost","atarilab","root","");
    
$c3=$d2->Consultar("call sp_mm_referencia(705)");
    while(
$r3 $d2->Registro($c3)){
                  echo (
$r3[5]."<br>");
                 } 
asi funciona, pero si elimino el segundo NEW manda el mensaje que digo

Código PHP:
                 $d2= new MyBD5("localhost","atarilab","root","");
                 
$c2=$d2->Consultar("call sp_mm_referencia(704)");
                 while(
$r2 $d2->Registro($c2)){
                         echo (
$r2[5]."<br>");
                 }

                 
$c3=$d2->Consultar("call sp_mm_referencia(705)");
                 while(
$r3 $d2->Registro($c3)){
                         echo (
$r3[5]."<br>");
                 } 
no se que pasa, por que hay que poner dos NEW o en php es asi?

saludos y gracias
  #2 (permalink)  
Antiguo 19/08/2009, 10:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: Duda con el uso de CLASS para mysql

Ese no es problema de tu class, ni de que uses PHP OO, si ves el Manual de PHP tienes que cerrar el resultset antes de poder enviar otro Query.

Saludos.

Tema trasladado desde PHP General.
  #3 (permalink)  
Antiguo 19/08/2009, 10:39
 
Fecha de Ingreso: agosto-2009
Mensajes: 3
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Duda con el uso de CLASS para mysql

Cita:
Iniciado por GatorV Ver Mensaje
Ese no es problema de tu class, ni de que uses PHP OO, si ves el Manual de PHP tienes que cerrar el resultset antes de poder enviar otro Query.

Saludos.

Tema trasladado desde PHP General.
ummm, tambien lo hise segun el manual de php debes poner mysqli_free_result($result); antes de hacer otra consulta para mi caso puse
Código PHP:
                 $d2= new MyBD5("localhost","atarilab","root","");
                 
$c2=$d2->Consultar("call sp_mm_referencia(704)");
                 while(
$r2 $d2->Registro($c2)){
                         echo (
$r2[5]."<br>");
                 }
                 
$d2->Libera($c2);
                
// $d2= new MyBD5("localhost","atarilab","root","");
                 
$c3=$d2->Consultar("call sp_mm_referencia(705)");
                 while(
$r3 $d2->Registro($c3)){
                         echo (
$r3[5]."<br>");
                 } 
igual me da el error "Commands out of sync; you can't run this command now" tambien lo hise con $d2->Close(); y lo mismo.

saludos y gracias por tu respuesta.
  #4 (permalink)  
Antiguo 19/08/2009, 12:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: Duda con el uso de CLASS para mysql

Usa mysqli_more_results() y mysqli_next_result() y al final el mysqli_free_result().

Saludos.
  #5 (permalink)  
Antiguo 20/08/2009, 09:15
 
Fecha de Ingreso: agosto-2009
Mensajes: 3
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Duda con el uso de CLASS para mysql

hola

por fin encontre algo que si funciona para trabajar con SP, aqui esta el ejemplo

Código PHP:
$mysqli = new mysqli("localhost","root","","atarilab");
if (
$mysqli->multi_query("call sp_mm_referencia(705)")) {
    do {
        if (
$result $mysqli->store_result()) {
            while (
$row $result->fetch_row()) {
                
printf("%s\n"$row[5]);
            }
            
$result->free();
        }
    } while (
$mysqli->next_result());
}
if (
$mysqli->multi_query("call sp_mm_referencia(704)")) {
    do {
        if (
$result $mysqli->store_result()) {
            while (
$row $result->fetch_row()) {
                
printf("%s\n"$row[5]);
            }
            
$result->free();
        }
    } while (
$mysqli->next_result());
}
if (
$mysqli->multi_query("call sp_mm_referencia(706)")) {
    do {
        if (
$result $mysqli->store_result()) {
            while (
$row $result->fetch_row()) {
                
printf("%s\n"$row[5]);
            }
            
$result->free();
        }
    } while (
$mysqli->next_result());
}
$mysqli->close(); 
la conclusion que saco que solo con $mysqli->multi_query se puede trabajar con varios sp por separados

saludos y 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 02:35.