Foros del Web » Programando para Internet » PHP »

APORTE Clase PDO

Estas en el tema de APORTE Clase PDO en el foro de PHP en Foros del Web. Saludos, Hace tiempo me diseñe una clase para trabajar con Bases de datos en proyectos donde no utilizaba Laravel. Pues el ORM de Laravel me ...
  #1 (permalink)  
Antiguo 16/02/2017, 09:03
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
APORTE Clase PDO

Saludos,

Hace tiempo me diseñe una clase para trabajar con Bases de datos en proyectos donde no utilizaba Laravel. Pues el ORM de Laravel me encanta y quería hacer algo muy parecido a ese ORM para no tener que escribir largas sentencias SQL, con los consecuentes fallos de escritura que puden aparecer.

Asi que quisiera compartir esta clase con la comunidad, pues hasta ahora era solo para mi y viendo, a todas las personas que publican aquí, como mezclan en un mismo archivo codigo html, php y sql pues decidí, al menos, ahorrarle esos trabajitos extras con esta clase.

Está construida sobe PDO, así que quien quiera utilizarla, tiene que activar la extensiones pdo de php dependiendo del tipo de base de datos que vaya a utilizar.

Como ya saben muchos, PDO es capaz de trabajar con diferentes bases de datos entre las mas conocidas, MySql, SQL Server, SQL Lite y ODBC.

Si quereis usarla descargadla haciendo clic aqui

Ahora unos ejemplos para comenzarla a usar:

La conexión
Código PHP:
# El puerto es opcional
$db = new DBManager('host''username''password''database name''driver''port'
Testear conexión
Código PHP:
/* Para probar la conexión antes de poneros a escribir código como posesos, 
siempre es mejor probar la conexión así que hay una función para tal efecto */
$db->testConnection();

# Retornará true o false 
Ejemplos para queries
INSERT
Código PHP:
$array = [
    
'campo1' => 'valor1',
    
'campo2' => 'valor2',
    ...
];

$db->insert('tabla'$array); 
UPDATE
Código PHP:
$array = [
    
'campo1' => 'valor1',
    
'campo2' => 'valor2',
    ...
];

$db->where('campo'$valor);
$db->update('tabla'$array); 
COUNT
Código PHP:
$db->getCount('tabla''campo'); 
SELECT
Código PHP:
# Traer datos de la tabla
$db->get('tabla');

# Traer solo algunos campos de la tabla
$select = ['campo1''campo2', ...];
$db->get('tabla'$select);

#Realizar un join
/* El tipo de JOIN puede ser los que permita PDO que en principio son 
INNER, LEFT, RIGHT Y FULL. Si falla, es muy probable que PDO no lo permita hacer.*/
$db->join('tabla2''tabla1''campo_tabla1''campo_tabla2''tipo_join');
$db->get('tabla1');

#NOTA: se puede realizar más de un join, solo hay que ponerlos todos antes del $db->get();

# Traer datos según valor(es)
# Puede ser solo por un filtro
$db->where('campo''valor');
$db->get('tabla');

# Como puede ser por varios
$db->where('campo1''valor1');
$db->where('campo2''valor2');
$db->get('tabla');

# Traer datos ordenados por un campo, si se agrega lo siguiente, por defecto el orden será DESC
$db->orderby('campo'); 
$db->get('tabla');

# Pero si lo queremos ASC
$db->orderby('campo''A');
$db->get('tabla');

# Complicando el query
$db->where('campo1''valor1');
$db->where('campo2''valor2');
$db->join('tabla2''tabla1''campo_tabla1''campo_tabla2''tipo_join');
$db->orderby('campo');
$db->get('tabla1'); 
IMPIRMIR RESULTADO EN PANTALLA
Código PHP:
$db->dd($db->get('tabla'); 
SI SE DESEA COMPROBAR COMO SE ESTAN CONSTRUYENDO LOS QUERIES, SE PUEDEN IMPIRMIR EN PANTALLA
Código PHP:
# Solo es necesario actibar la opción dentro de $db->get(), $db->insert() o $db->update()
$db->get('tabla'null1);
$db->insert('tabla'$array1);
$db->update('tabla'$array1); 
NOTA: no se atenderán cuestiones de funcionamiento, excepto si son problemas de conexión.

Si da fallos en la construcción de SQL, impriman el SQL en pantalla que genera, copienlo y pruebenlo en un gestor de base de datos como phpMyAdmin, lo más probable es que se hayan equivocado ustedes al setear cada función.

Esto es PDO, así que hay sentencias que aunque funcionen en MySQL, no quiere decir que funcionen con PDO. Para ello consulten la documentación de PDO para saber qué pueden hacer y qué no respecto a MySQL

Espero que lo disfruten y les ayude acelerando su propósito de cambiar el mundo.

Un saludo a todos
  #2 (permalink)  
Antiguo 16/02/2017, 12:34
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: APORTE Clase PDO

Me parece una excelente idea y, aunque solo atenderás cuestiones de funcionamiento, me atrevo a realizar algunas observaciones:

- Estaría bien si colocas aquí mismo el código y, mucho mejor aún, en github.

- Cada que ejecutas una consulta se crea una nueva conexión; lo ideal sería tener una propiedad private $_con; y establecerla desde el constructor.

- En el where solo consideras = y LIKE, faltan <, >, >=, >=, BETWEEN, MATCH AGAISNT (entre otros) y solo hay posibilidad de AND, nada de OR ni agrupar condiciones.

- El join funciona para agregar solo una tabla.

Como dije, es una excelente idea, un buen punto de partida y dependerá de cada quien hacer las adaptaciones que crea convenientes para satisfacer sus necesidades.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 16/02/2017, 14:27
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: APORTE Clase PDO

Sí, es buena idea entonces subirlo a github para que otros le vayan aportando.

El tema del conector lo puse de esa manera para no tener una conexión todo el rato activa, así solo cuando se necesita consultar algo, se activa y se desactiva al terminar.

Como dije, esa clase la hize solo para mi, para ahorrarme trabajo, con lo cual le faltan cosas, sí, ya que da la casualidad que las cosas que faltan no las he necesitado por ahora con lo cual ni pensé en su momento y a medida que necesitaba ciertos tipos de consulta, iba añadiendo.

En cuanto a lo del join, se pueden añadir más de una tabla, no sé pq dices que solo una.
  #4 (permalink)  
Antiguo 16/02/2017, 16:21
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: APORTE Clase PDO

El proyecto todavía es muy primitivo pero si lo vas a compartir en github o similar, es recomendable que te apegues a las recomendaciones PSR-2 y PSR-4, agregues soporte para composer ya que en la actualidad es algo básico y por favor agrega pruebas unitarias a tu proyecto es importante y no es opcional si quieres tener un código de calidad ya que reduce los errores que puedes introducir durante los cambios o mejoras, ademas te sirve como documentación de uso de la clase y te facilita la refactorización así como el diseño de tu proyecto.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 16/02/2017, 17:43
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: APORTE Clase PDO

Bueno, si te soy sincero hhs, esa clase no la pensé para eso pues de que me sirve esta clase frente a un potentísimo ORM, esta clase está pensada para que las personas que no sepan mucho de programar no se compliquen tratando de instalar un ORM pues pongo la mano en el fuego que muchos ni saben exactamente para que sirve composer.

Con esta clase pues se olvidan de trabajar con sentencias sql directamente y así salen del paso a parte de ahorrar tiempo en sus desarrollos y lineas de código.

Ni lo podría considerar un proyecto, más bien es una simple herramienta para faciliar la vida a los nuevos que dejaran de usarla en cuanto descubran el uso de composer y la potencia de los ORM dónde estarán más familiarizados después de usar esta clase pues se ha tratado de simular, lo más posible, la manera de trabajar de esta forma con bases de datos.

Última edición por Triby2; 16/02/2017 a las 17:49
  #6 (permalink)  
Antiguo 16/02/2017, 18:25
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: APORTE Clase PDO

yo no creo que ayudes a los nuevos fomentando mas de lo mismo, creo que te lo agradecerían mas si les ayudas a comprender como usar herramientas como composer y phpunit por dar un ejemplo. Pero bueno este tema ya se ha tratado muchas veces a lo largo de los años y no pretendo iniciar una discusión al respecto, así que suerte con lo que sea que pretendes con tu aporte.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 16/02/2017, 20:19
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: APORTE Clase PDO

Bueno no todos somos unos "freakys" de la programación donde se trata siempre de usar lo más "trend" en programación con las nuevas tecnologías. Algunos solo quieren realizara una aplicación que controle cuantas tazas de café toma cada empleado durante una jornada laboral y para ello, mi clase es más que suficiente para ahorrarse unas cuantas lineas de código, horas de trabajo y más de un quebradero de cabeza por tratar de entender como funciona el SQL.

Es más, estoy seguro que aquí hay personas de más de 40 años empezando a programar por primera vez y a esas personas (a menos que sea un deborador de libros) no le hables de muchos protocolos y tecnologías complementarias para hacer un proyecto como el que puse ya que no tienen las ganas o quizás el tiempo de aprender todo eso, pues aprenderlo les llevará más horas y lo más seguro que ni lleguen a terminar lo que quieren hacer con tanta información en un momento.

Es solo por ese motivo el que me animé a compartir mi clase.
  #8 (permalink)  
Antiguo 16/02/2017, 21:53
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: APORTE Clase PDO

Bueno triby, te hice caso y lo publiqué en Github.

Abierto para que quien lo desee le agregue funcionalidad
https://github.com/cdiazr/PDOManager

Le añadí la condicional "OR WHERE" y el método GROUP BY

Última edición por Triby2; 19/02/2017 a las 13:08
  #9 (permalink)  
Antiguo 26/02/2017, 08:53
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: APORTE Clase PDO

Le añadí una particularidad y una función más para potenciar un poco más mi clase.

La particularidad es que para cuando se desee revisar lo que los queries generan o bien revisar la sentencia que está generando la clase, se puede utilizar también por las noches cuando trabajamos en oscuridad. Particularmente odio las paginas web no tengan un fondo negro con letra clara por las noches cuando estamos sin la luz. Pues el método dd(), acepta un 2º parametro para activar esa característica, tal que así

Código PHP:
$this->dd($resultado1
La nueva función que añadí es la característica de realizar subconsultas dentro de otra, en principio está pensada para que la subconsulta forme parte de las columnas del SELECT principal y para mostrar como funciona en real he desarrollado un simple sistema de mensajería interna entre usuarios muy fácil de usar. De esta manera se podrán ver todos los métodos en acción para que podais aprender, en un ejemplo real, a usar mi clase.

Etiquetas: clase, html, mysql, pdo, select, sql
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

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 16:17.