Download the PHP package osvaldogdelrio/pdo-database without Composer
On this page you can find all versions of the php package osvaldogdelrio/pdo-database. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download osvaldogdelrio/pdo-database
More information about osvaldogdelrio/pdo-database
Files in osvaldogdelrio/pdo-database
Package pdo-database
Short Description Clase en PHP para trabajar con PDO
License MIT
Informations about the package pdo-database
pdo-database
Librería en PHP para trabajar con PDO y bases de datos SQL escrita en español.
Hasta el momento contiene funcionalidad básica:
SELECT JOIN ORDER LIMIT ORDER-LIMIT INSERT UPDATE DELETE TRUNCATE
Instalación
Escrita en PHP 8.0
Requiere: PSR-4: Autoloader para un mejor funcionamiento sin tener que reescribir los namespace
Vía composer
Requiere de Factory para un mejor uso aunque puede utilizarse sin este método
Usarla sin Factory requiere de mucho código que puede llegar a ser abrumador en proyectos que implementan Modelos, Controladores y Vistas, para realizar una conexión de forma tradicional hay que hacer:
Para realizarla con Factory y la clase CrearConexionBaseDeDatos
Para ejecutar un sentencia "SELECT * FROM id WHERE Idusuario = 1" y mostrar los resultados en arrays sin Factory se requiere
Las tablas necesarias para las pruebas de la librería están disponibles en test.sql usando:
- base de datos: test
- usuario: root
- password:
- host: 127.0.0.1
Listado de sentencias con código usando Factory
SELECT
SELECT * FROM prueba
SELECT id,uno,dos FROM prueba
Operadores lógicos aceptados en la sentencia WHERE, AND y OR
Cuando la sentencia se construye se valida que el operador lógico unicamente sea cualquiera de estos:
Reglas de validación para la construcción de sentencias WHERE
- El nombre de columna solo puede ser string
- Tiene que ser un operador lógico valido
- Ningun valor puede estar vacío
Reglas de validación para la construcción de sentencias WHERE AND, WHERE OR
- Tiene que ser un operador lógico valido
- Ningun valor puede estar vacíos
- Los campos solo pueden ser string
Reglas de validación para la construcción de sentencias BETWEEN, NOT BETWEEN
- Los valores no pueden estar vacios
- Los valores no pueden ser iguales, ejemplo (WHERE id BETWEEN 1 AND 1)
SELECT * FROM prueba WHERE id = ?
SELECT * FROM prueba WHERE id = ? AND uno != ?
SELECT * FROM prueba WHERE id = ? OR uno != ?
SELECT * FROM prueba WHERE id BETWEEN ? AND ?
SELECT * FROM prueba WHERE id NOT BETWEEN ? AND ?
INSERT
INSERT INTO prueba (uno,dos,tres) VALUES (?,?,?)
UPDATE
UPDATE prueba SET uno = ?,dos = ? WHERE id = ?
UPDATE prueba SET uno = ? WHERE id = ? AND id = ?
UPDATE prueba SET uno = ? WHERE id = ? OR id = ?
UPDATE prueba SET uno = ? WHERE BETWEEN id ? AND ?
UPDATE prueba SET uno = ? WHERE NOT BETWEEN id ? AND ?
DELETE
No acepta la sentencia sin el valor WHERE, WHERE AND, WHERE OR, WHERE BETWEEN o WHERE NOT BETWEEN, para borrar todo el contenido de una tabla usar TRUNCATE
DELETE FROM prueba WHERE id = ?
DELETE FROM prueba WHERE id = ? AND id = ?
DELETE FROM prueba WHERE BETWEEN id ? AND ?
DELETE FROM prueba WHERE NOT BETWEEN id ? AND ?
JOIN
Acepta INNER, RIGHT, LEFT, FULL
Las consultas con JOIN pueden llegara ser bastante complejas, esta librería puede armar una enorme cantidad de JOINs de forma relativamente sencilla, el esquema es simple, los elementos básicos del JOIN se colocan en un array, y este puede tener multiples JOIN a tablas internas, por ejemplo, en el siguiente ARRAY se arma una consulta que dice:
En definitiva no hay forma "sencilla" de armar una sentencia tan larga como puede ser un JOIN y que no confunda un poco, sin embargo, es muy útil poderlos hacer con arrays de forma practicamente ilimitada.
Esta consulta la podemos dividir en distintos arrays:
JOIN WHERE
De la misma forma podemos agregar al JOIN la sentencia WHERE AND, WHERE OR, WHERE BETWEEN y WHERE NOT BETWEEN, solo modificando en contenido del array en la llave 'where' =>
ORDER
Para agregar la sentencia ORDER BY en sentencias tipo SELECT ya sea con cualquier combinación de WHERE o JOIN solo hay que llamar la clase Factory terminando con OrderBy:
SELECT * FROM prueba ORDER BY id ASC
Para realizar una consulta SELECT WHERE ORDER BY la clase esta esta: SelectWhereOrderBy, todas clases que terminen en OrderBy aceptarán el parametro 'order' en el array
LIMIT
Para agregar la sentencia LIMIT en sentencias tipo SELECT ya sea con cualquier combinación de WHERE o JOIN solo hay que llamar la clase Factory terminando con Limit:
SELECT * FROM prueba LIMIT 1
Para realizar una consulta SELECT WHERE LIMIT la clase esta esta: SelectWhereLimit, todas clases que terminen en Limit aceptarán el parametro 'limit' en el array
ORDER-LIMIT
Las sentencias ORDER BY 'nombre_de_columna' LIMIT 'numero_de_filas' se pueden obtener agregando a cualquier clase Select o Join la terminación OrderByLimit, e incluir en el array ambos campos:
SELECT * FROM prueba ORDER BY id LIMIT 10
TRUNCATE
Borra todos los datos de la tabla sin eliminar la tabla
EJECUTAR LA CONSULTA
Al ejecutar cada consulta SELECT, UPDATE, INSERT, DELETE, JOIN, O CUALQUIER OTRA:
RESULTADOS DE SELECT
Contar los resultados de un select
Devuelve objetos
Devuelve arrays
Devuelve string en formato JSON
RESULTADOS DE INSERT
ContarResultados devuelve el número de filas afectadas por la consulta ejecutada
Estructura de directorios
ejemplos de uso
PHP Unit
Para ejecutar las pruebas
Para ejecutar las pruebas y mostrar en texto con --testdox
La librería tiene pruebas que se prueden encontrar en pdo-database/test. Contiene pruebas unitarias para la construcción de:
- Clases necesarias para la conexión - ConexionTest.php
- Clases para ejecutar las consultas - ConsultasTest.php
- Clases que ejecutan las consultas directamente con query - EjecutarConsultaTest.php
- Clases de los elementos de creación de la sentencia SQL - ElementosTest.php
- Clases Factory que reducen la escritura de código - FactoryTest.php
- Clases que muestran resultados en distintos formatos - ResultadosTest.php
Idea
La idea principal es lograr encapsular los valores de una sentencia SQL y dejar de usar sentencias IF, SETTERS Y GETTERS que pueden producir comportamientos extraños. Usar Programación Orientada a Objetos, considerando un objeto una sentencia SQL como SELECT * FROM, que debe de permanecer inmutable hasta la destrucción del mismo.
¿Por qué tantos objetos y clases pequeños?
Al tratar de programar en OOP a lo largo de mis proyectos personales me he encontrado con el problema de tener que estar modificando una y otra vez el código por mover una linea en alguna parte, sobre todo cuando se trata de Clases que intercatuan con la Base de Datos. Creando esta estructura intento minimamente realizarla con principios SOLID, tarea bastante dificil, pero siempre se puede ir mejorando.
Por ejemplo: si se requiere realizar una consulta sencilla como SELECT * FROM 'tabla' ¿para qué cargar clases que manejan componentes con consultas más complejas? o que en la misma clase se pueda realizar select, update, insert, delete, truncate y hasta create? Al final del día realizar un poco más de esfuerzo escribiendo clases que tengan solo una función e inyectarlas en otras para construir una usabilidad más compleja ahorra mucho tiempo y esfuerzo en proyectos que crecen de pequeños a medianos y grandes.
Los componentes las clases funcionan en su mayoría de forma agnostica a su entorno, es decir, las clases para construir una sentencia SQL funciona sin intercatuar con las clases que generan la conexión, etcétera.
Consultas con sentencias directas
Auqnue no es recomendable realizar consultas directas sin utilizar bindValue, o encapsular las consultas para tener la seguridad que la consulta que escribimos es la que se ejecutará y prevenir SQL Injection, en ambientes de desarrollo es útil, se pueden usar haciendo: