Ver Mensaje Individual
  #7 (permalink)  
Antiguo 12/01/2010, 22:23
kof3d
 
Fecha de Ingreso: diciembre-2007
Mensajes: 42
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Conexión a BD MySQL y consultas anidadas

Gracias por la respuesta, pero afortunadamente ya solucioné el problema.

La cuestión es que al utilizar el patrón singleton creo una sola conexión lo cual provocaba que en la iteración anidada de consulta se reemplace el identificador de la consulta (id_consulta).

Para solucionarlo simplemente dejé de utilizar la iteración anidada cambiandola por una consulta "Join", de esta manera el identificador de consulta (id_consulta) no era cambiado en el recorrido del ciclo.

Para quien le pueda interesar aquí les dejo el codigo de la clase y menu...

index.class.php
Código PHP:
class bd_mysql {
        
/* Variables de conexion */
        
private $servidor;
        private 
$usuario_bd;
        private 
$clave_bd;
        private 
$database;
        
        private static 
$instance;
        
        
/* Identificador de conexión y consulta */
        
private $conexion_id;
        private 
$consulta_id;
        
        
/* Método constructor */
        
private function __construct(){
            
$this->servidor "localhost";
            
$this->usuario_bd "root";
            
$this->clave_bd "mysql";
            
$this->database "dumpingoo";
            
$this->conectar();
        }
        
        public static function 
singleton(){
            if (!isset(
self::$instance)) {
                
$c __CLASS__;
                
self::$instance = new $c;
            }
            return 
self::$instance;
        }

        
/* Clone no permitido */
        
public function __clone(){
            
trigger_error('Clone no se permite.'E_USER_ERROR);
        }

        
/*Conexion a la bd*/
        
public function conectar(){
            
/* Conectamos al servidor */
            
$this->conexion_id=mysql_connect($this->servidor$this->usuario_bd$this->clave_bd);
                        
            
/* Seleccionamos la base de datos */
            
mysql_select_db($this->database$this->conexion_id);
        }
        
        public function 
consultar($query){
            if(!empty(
$query)){
                
/* Ejecutamos la consulta */
                
$this->consulta_id=mysql_query($query$this->conexion_id);
            }
        }
        
        
/* Almacenamos el resultado de la consulta en un objeto */
        
public function ver_consulta(){
            return 
mysql_fetch_object($this->consulta_id);
        }
    } 

index.php
Código PHP:
....
....
include_once("index.class.php");
    
    $seccion = bd_mysql::singleton();
    $seccion->consultar("SELECT secciones.*, categorias.* FROM secciones, categorias WHERE secciones.id_seccion = categorias.id_seccion");
    $sec = $seccion->ver_consulta();
    
    do{
        $matriz[$sec->nombre_seccion][$sec->nombre_categoria] = $sec->id_categoria;
    }while($sec = $seccion->ver_consulta());

....
....

<div id="menu1">
            <ul>
                <?
                
foreach($matriz as $seccion => $vseccion){
                
?>
                    <li><span><? echo $seccion?></span>
                        <ul>
                       <?
                        
foreach($vseccion as $categoria => $vcategoria){
                    
?>
                            <li><a href="<? echo $vcategoria?>" ><? echo $categoria?></a></li>
                       <?
                        
}
                    
?>
                        </ul>
                    </li>
                    <br />
                <?
                
}
                
?>
                    <li><div style="text-align: center;">
                        <!-- start *****macro.com code -->
                        <a href="http://www.*****macro.com/index.php?*****macropasto" target="_blank"><b><img src="http://www.*****macro.com/images/banners/es/004.gif" title="***** Macro" alt="***** Macro" border="0" /></b></a>
                        <!-- end *****macro.com code --></div>
                    </li><br />
            </ul>
        </div>
....
....
Y listo... quedo abierto a cualquier sugerencia...