Hola Triby
He realizado solo un pequeño cambio en tu código y parece que va perfecto:
Código PHP:
Ver original// // Facilita el manejo extendiendo de PDO
class DBmysql extends PDO {
//class DBmysql extends Conexion {
// Crea solo una instancia de la clase (patrón Singleton)
private static $_instance = false;
public static function conectar() {
// Verificar si no se ha realizado la conexión
if(self::$_instance === false) {
// Conectamos a la base de datos
try {
// Verifica que los parámetros son correctos, tomé el código de otra clase
self::$_instance = new PDO("mysql:host=localhost;dbname=nombrebd",
"root",
"",
array(PDO
::ATTR_ERRMODE => PDO
::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
//Intento ver en el código fuente las actuales conexiones a la BD.
echo "Acabo de conectarme FW";
} catch (PDOException $e) {
// Hay que elaborar mejor el manejo de errores, esto solo es ejemplo
die('No se puede establecer una conexión a base de datos.'); }
}
return self::$_instance;
}
}
Luego por ejemplo en el modelo de subcategorías solo cambio Conexion por DBmysql y listo:
Código PHP:
Ver original/*=============================================
MOSTRAR SUB-CATEGORÍAS SINGLETON
=============================================*/
static public function mdlMostrarSubCategorias($tabla, $item, $valor){
$stmt = DBmysql::conectar()->prepare("SELECT * FROM $tabla WHERE $item = :$item");
$stmt -> bindParam(":".$item, $valor, PDO::PARAM_STR);
$stmt -> execute();
return $stmt -> fetchAll();
$stmt -> close();
$stmt = null;
}
Por lo que veo ahora al aplicar este nuevo método reduce en gran cantidad el número de conexiones a la base de datos, pero no estoy seguro del todo si lo estoy haciendo de la manera correcta tanto en ver cuantas conexiones hago por página y también en como lo estoy aplicando al código actual.
¿Estoy en lo correcto como lo estoy haciendo ahora?
He visto incluso que si por ejemplo también añado
$stmt = DBmysql::conectar() a otros funciones dentro del mismo modelo (productos-modelo.php) por ejemplo en categorías o en listar productos o cualquier otra zona que en total solo aparece 1 conexión.
Por ejemplo aquí aplico el mismo cambio para categorías.
Código PHP:
Ver original/*=============================================
MOSTRAR CATEGORÍAS
=============================================*/
static public function mdlMostrarCategorias($tabla, $item, $valor){
if($item != null){
$stmt = DBmysql::conectar()->prepare("SELECT * FROM $tabla WHERE $item = :$item");
$stmt -> bindParam(":".$item, $valor, PDO::PARAM_STR);
$stmt -> execute();
return $stmt -> fetch();
}else{
$stmt = DBmysql::conectar()->prepare("SELECT * FROM $tabla");
$stmt -> execute();
return $stmt -> fetchAll();
}
$stmt -> close();
$stmt = null;
}
Con este cambio entonces aunque me conecto ya más de una vez en total me da 1 conexión.
Me pregunto entonces que si también cambio todas las anteriores consultas de
$stmt = Conexion:: al nuevo
$stmt = DBmysql:: , ¿sería posible dejar solo 1 conexión por página en total o es mejor aplicar dicha esta nueva opción solo en algunas zonas concretas del proyecto que generen varias conexiones a la vez como por ejemplo sería subcategorías, listado de productos etc etc? Es decir o meter en todas
$stmt = DBmysql:: o solo cambiarla en zonas que generen varias consultas a la base de datos y en el resto mantener la anterior de
$stmt = Conexion::
Espero no haber liado mucho la pregunta...
Por cierto, supongo que conoces este ejemplo, comentar que también me recomendaron hacer algo parecido siguiendo este enlace:
https://gist.github.com/ftonato/2973...a48804dcdb71dd
Sin embargo creo que tu ejemplo se adapta y me facilita más el trabajo al proyecto actual.
Gracias por tu gran ayuda.
Saludos.