El eterno tema con PHP y MySQL

Hola a todos! Seguramente cada uno de los que escriben mucho y constantemente en PHP se toparon con la cuestión de optimizar y simplificar las consultas a las bases de datos MySQL . Alguien ya escribió clases / procedimientos convenientes para sí mismo, alguien encontró algo en los espacios abiertos de la red.

Dado que mis scripts en PHP comienzan a reducirse cada vez más a una sola tarea: obtener de una base de datos y pasar estos datos a los scripts Java del lado del cliente, me lo hice más fácil al crear una clase de base de datos conveniente (para mí, por supuesto) MySQL

Haré una reserva de inmediato : la clase mqsli integrada es bastante conveniente y funcional, pero ante las mismas preguntas todos los días sería extraño no aliviar un poco tu destino.

La clase exDBase se ofrece a su atención, es esencialmente un contenedor para la clase mysqli . Haga una reserva de inmediato: soy un programador principiante y estoy listo para recibir muchas críticas por el código escrito en comentarios o mensajes personales. Realmente no soy dueño de RegExp, por ejemplo, lo que simplificaría enormemente el código, tal vez haya otras quejas. Pero no obstante ...

Toda la biblioteca está contenida en un archivo: exdbase.php . Este archivo contiene la descripción de la clase exDBase . Para comenzar a trabajar, solo necesita descargar el archivo, registre la siguiente línea:

require_once ('exdbase.php'); 

Primero, cree una instancia de la clase, es muy simple:

 $DB = new exDBase (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); if ($DB->error) echo " : $DB->error"; 

La propiedad $ DB-> error siempre tendrá el error de la última operación (si hubo un error), o estará vacía.

El formato es casi idéntico a la creación de instancias de la clase mysqli . Naturalmente, en lugar de las constantes indicadas en el ejemplo, debe sustituir los valores reales por el host, el nombre de usuario, la contraseña y el nombre de la base de datos.

Ahora puedes practicar. Supongamos que tenemos una base de datos preparada y que tiene una tabla de clientes con campos:

ID : número único, incremento automático
NOMBRE - nombre del cliente
EDAD - edad del cliente
CANTIDAD - cantidad de compras
BLOQUEADO : booleano, cliente bloqueado o activo
AJUSTES - parámetros personales, los almacenamos en formato JSON

Consultar base de datos


Consigamos todas las entradas de la tabla ' clientes '. Hay un método fetchArray para esto .

 $res = $DB->fetchArray ('clients'); //         if ($res) foreach ($res as $client) echo print_r ($client, true); //      

¿Y si queremos obtener solo el primer registro de la solicitud? Hay un método fetchFirst para esto .

 $res = $DB->fetchFirst ('clients'); //        if ($res) echo print_r ($client, true); //      

Pero, apenas necesitamos obtener todos los registros de la tabla, siempre hay condiciones de selección (el campo DONDE en el comando SELECCIONAR). Que hacemos Si, muy simple. Este es el segundo argumento de los métodos fetchArray o fetchFirst.

Supongamos que queremos seleccionar a todos los clientes llamados John. En nuestra clase, esto se puede hacer de dos maneras.

El primero es simplemente establecer la condición con una cadena de la forma "NOMBRE = 'John'"

 $res = $DB->fetchArray ('clients', "NAME = 'John'"); 

El segundo es establecer la condición en una matriz:

 $res = $DB->fetchArray ('clients', array ("NAME" => "John")); 

¿Y si hay más condiciones? Por ejemplo, ¿debería tener 30 años? Fácil:

 $res = $DB->fetchArray ('clients', array ("NAME" = "John", "AGE" => 30)); 

De esta manera puede combinar múltiples términos de búsqueda. Pero igualdad ... ¿Y si queremos encontrar a todos los clientes con el nombre de John que tengan más de 25 años? Aquí los prefijos especiales vienen al rescate:

 $res = $DB->fetchArray ('clients', array ("NAME" = "John", ">=AGE" => 25)); 

Además de "> =" puede usar: ">", "<", "<=", "! =", "<>", "! =". Por lo tanto, puede crear consultas de diversos grados de complejidad y siempre obtener las respuestas correctas.

El tercer parámetro de los métodos de recuperación de la base de datos son los campos de la tabla. Se pueden especificar como una cadena (por ejemplo: "NOMBRE, EDAD") o como una matriz: matriz ("NOMBRE", "EDAD").

 $res = $DB->fetchArray ('clients', array ("NAME" = "John", ">=AGE" => 25), array ("NAME", "AGE")); 

El cuarto y último parámetro para los métodos fetchArray y fetchFirst fetch es el orden de clasificación. También se especifica mediante una cadena (tipo: “ID ASC, NAME DESC”) o una matriz de matriz (“ID” => “ASC”, “NAME” => “DESC”).

 $res = $DB->fetchArray ('clients', array ("NAME" = "John", ">=AGE" => 25), array ("NAME", "AGE"), array ("ID" => "ASC", "NAME" => "DESC")); 

Bueno, terminando con los datos que solicita, ¿y cómo limitar la selección? Por ejemplo, ¿solo se necesitan las primeras 10 entradas?

Esto se hace usando el método setLimit (), así:

 $DB->setLimit (10); $res = $DB->fetchArray ('clients', "NAME = 'John'"); 

El método setLimit () funciona en una sola solicitud, después de lo cual se restablecen los límites.

Insertar nuevos datos


Hay un método insert () para escribir nuevos datos.

 $id = $DB->insert ('clients', array ("NAME" => 'Peter', "AGE" => 27, "AMOUNT" => 1000.25)); 

Devuelve el valor de la clave de incremento automático principal (si se especifica una en la tabla). En nuestro caso, devolverá la ID del registro insertado.

Actualización de datos


Los datos se actualizan utilizando el método update () .

 $DB->update ('clients', array ("NAME" => 'Peter'), array ("AGE" => 30, "AMOUNT" => 2000.25)); 

Actualizamos todos los registros donde el nombre (campo NOMBRE) es 'Peter'. El segundo argumento del método es la condición de selección, exactamente en el mismo formato que WHERE para SELECT. Bueno, el tercer argumento del método son los datos en sí. Ahora todos esos registros con el nombre 'Peter' tendrán 30 años y la suma será 2000.25.

Eliminación de datos


Si ya entendió la lógica de la biblioteca, entonces la eliminación será muy simple. El método se llama delete () .

 $DB->delete ('clients', array ("NAME" => 'Peter'); //      'Peter' $DB->delete ('clients', array (">AGE" => '20'); //       20. 

Aquí hay una primera excursión breve a la biblioteca exDBase. Hay una serie de otras características más avanzadas, pero más sobre eso en otro momento.

UPD: puede descargar el archivo en GitHub

Buen código para todos!

Source: https://habr.com/ru/post/es420697/


All Articles