Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/06/2019, 12:58
Avatar de kahlito
kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 8 meses
Puntos: 65
Optimizar y reducir el número de conexiones a la base de datos

Buenas.

Estoy haciendo un proyecto bastante extenso donde sigo un modelo con PDO y MVC donde en algunas de las páginas que cargan superamos las 25 conexiones a la base de datos y por lo tanto da problemas de conexión con el servidor actual que tenemos ya que tiene fijado ese límite de conexiones y me gustaría saber si alguna posibilidad de reducir las consultas las conexiones actuales ya que sino tendremos que cambiar a un servidor dedicado.

Por ejemplo utilizando este módulo en concreto para categorías que cargan en el menú salen 5 conexiones.

cabezote.php

Código PHP:
<!--=====================================
CATEGORÍAS
======================================-->

        <div class="col-xs-12 backColor" id="categorias">

            <?php

                $item 
null;
                
$valor null;

                
$categorias ControladorProductos::ctrMostrarCategorias($item$valor);

                foreach (
$categorias as $key => $value) {

                    echo 
'<div class="col-lg-2 col-md-3 col-sm-4 col-xs-12">
                            
                            <h4>
                                <a href="'
.$url.$value["ruta"].'" class="pixelCategorias">'.$value["categoria"].'</a>
                            </h4>
                            
                            <hr>

                            <ul>'
;

                            
$item "id_categoria";

                            
$valor $value["id"];

                            
$subcategorias ControladorProductos::ctrMostrarSubCategorias($item$valor);
                            
                            foreach (
$subcategorias as $key => $value) {
                                    
                                    echo 
'<li><a href="'.$url.$value["ruta"].'" class="pixelSubCategorias">'.$value["subcategoria"].'</a></li>';
                                }    
                                
                            echo 
'</ul>

                        </div>'
;
                }

            
?>    

        </div>

    </div>
productos-controlador.php

Código PHP:
<?php

class ControladorProductos{

    
/*=============================================
    MOSTRAR CATEGORÍAS
    =============================================*/

    
static public function ctrMostrarCategorias($item$valor){

        
$tabla "categorias";

        
$respuesta ModeloProductos::mdlMostrarCategorias($tabla$item$valor);

        return 
$respuesta;

    }

    
/*=============================================
    MOSTRAR SUBCATEGORÍAS
    =============================================*/

    
static public function ctrMostrarSubCategorias($item$valor){

        
$tabla "subcategorias";

        
$respuesta ModeloProductos::mdlMostrarSubCategorias($tabla$item$valor);

        return 
$respuesta;

    }

?>
modelo-productos.php

Código PHP:
<?php

require_once "conexion.php";

class 
ModeloProductos{

    
/*=============================================
    MOSTRAR CATEGORÍAS
    =============================================*/

    
static public function mdlMostrarCategorias($tabla$item$valor){

        if(
$item != null){

            
$stmt Conexion::conectar()->prepare("SELECT * FROM $tabla WHERE $item = :$item");

            
$stmt -> bindParam(":".$item$valorPDO::PARAM_STR);

            
$stmt -> execute();

            return 
$stmt -> fetch();

        }else{

            
$stmt Conexion::conectar()->prepare("SELECT * FROM $tabla");

            
$stmt -> execute();

            return 
$stmt -> fetchAll();

        }
        
        
$stmt -> close();

        
$stmt null;

    }

    
/*=============================================
    MOSTRAR SUB-CATEGORÍAS
    =============================================*/

    
static public function mdlMostrarSubCategorias($tabla$item$valor){

        
$stmt Conexion::conectar()->prepare("SELECT * FROM $tabla WHERE $item = :$item");

        
$stmt -> bindParam(":".$item$valorPDO::PARAM_STR);

        
$stmt -> execute();

        return 
$stmt -> fetchAll();

        
$stmt -> close();

        
$stmt null;

    }
?>
¿Es posible reducir esta consulta de categorias en el cabezote.php para por ejemplo intentar tener 1 sola conexión o 2 máximo?

En general, ¿hay algún modo global de recudir todas estas conexiones o hacerlo de otra manera? Ya que como comento anteriormente al llevar esta parte a un proyecto mucho más extenso superamos las 25 y hasta 30 conexiones en algunas zonas de la web.

Saludos.