Bonjour à tous! Certes, chacun de ceux qui écrivent beaucoup et constamment en
PHP a rencontré le problème de l'optimisation et de la simplification des requêtes vers les
bases de données MySQL . Quelqu'un a déjà écrit des classes / procédures pratiques pour lui-même, quelqu'un a trouvé quelque chose sur les espaces ouverts du réseau.
Étant donné que mes scripts en
PHP commencent de plus en plus à être réduits à une seule tâche - extraire d'une base de données et transférer ces données vers des scripts Java client, je me suis facilité la tâche en créant une classe de base de données pratique (pour moi, bien sûr)
MySQLJe ferai une réservation
tout de suite - la classe
mqsli intégrée est assez pratique et fonctionnelle, mais face aux mêmes questions
chaque jour, il serait étrange de ne pas alléger un peu votre sort.
La classe
exDBase est proposée à votre attention, c'est essentiellement un wrapper pour la classe
mysqli . Faites immédiatement une réservation - je suis un programmeur débutant et je suis prêt à recevoir beaucoup de critiques pour le code écrit dans des commentaires ou des messages personnels. Je ne possède pas vraiment RegExp par exemple, ce qui simplifierait grandement le code, il y a peut-être d'autres plaintes. Mais néanmoins ...
La bibliothèque entière est contenue dans un fichier -
exdbase.php . Ce fichier contient la
description de la classe
exDBase . Pour commencer à travailler, il vous suffit de télécharger le fichier, enregistrez la ligne suivante:
require_once ('exdbase.php')
Créez d'abord une instance de la classe, c'est très simple:
$DB = new exDBase (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); if ($DB->error) echo " : $DB->error";
La propriété
$ DB-> error aura toujours l'erreur de la dernière opération (s'il y a eu une erreur), ou elle sera vide.
Le format est presque identique à l'instanciation de la classe
mysqli . Naturellement, au lieu des constantes indiquées dans l'exemple, vous devez remplacer les valeurs réelles par l'hôte, le nom d'utilisateur, le mot de passe et le nom de la base de données.
Vous pouvez maintenant vous entraîner. Supposons que nous ayons une base de données prête à l'emploi et une table
clients avec des champs:
ID - numéro unique, incrémentation automatique
NAME - nom du client
ÂGE - âge du client
AMOUNT - montant des achats
BLOQUÉ - booléen, client verrouillé ou actif
RÉGLAGES - paramètres personnels, nous les stockons au format JSON
Base de données de requête
Récupérons toutes les entrées de la table '
clients '. Il existe une méthode
fetchArray pour
cela .
$res = $DB->fetchArray ('clients'); // if ($res) foreach ($res as $client) echo print_r ($client, true); //
Et si nous voulons obtenir uniquement le premier enregistrement de la demande? Il existe une méthode
fetchFirst pour
cela .
$res = $DB->fetchFirst ('clients'); // if ($res) echo print_r ($client, true); //
Mais, nous avons à peine besoin d'obtenir tous les enregistrements de la table, il y a toujours des conditions de sélection (le champ WHERE dans la commande SELECT). On fait quoi? Oui, très simple. Il s'agit du deuxième argument des méthodes fetchArray ou fetchFirst.
Supposons que nous voulons sélectionner tous les clients nommés John. Dans notre classe, cela peut se faire de deux manières.
La première consiste à simplement définir la condition avec une chaîne de la forme "NAME = 'John'"
$res = $DB->fetchArray ('clients', "NAME = 'John'");
La seconde consiste à définir la condition dans un tableau:
$res = $DB->fetchArray ('clients', array ("NAME" => "John"));
Et s'il y a plus de conditions? Par exemple, l'âge devrait-il avoir 30 ans? Facile:
$res = $DB->fetchArray ('clients', array ("NAME" = "John", "AGE" => 30));
De cette façon, vous pouvez combiner plusieurs termes de recherche. Mais l'égalité ... Et si nous voulons trouver tous les clients du nom de John qui ont plus de 25 ans? Ici, des préfixes spéciaux viennent à la rescousse:
$res = $DB->fetchArray ('clients', array ("NAME" = "John", ">=AGE" => 25));
En plus de "> =", vous pouvez utiliser: ">", "<", "<=", "! =", "<>", "! =". Ainsi, vous pouvez créer des requêtes de divers degrés de complexité et toujours obtenir les bonnes réponses.
Le troisième paramètre des méthodes de récupération de base de données est les champs de table. Ils peuvent être spécifiés soit sous forme de chaîne (par exemple: "NOM, AGE") ou sous forme de tableau: tableau ("NOM", "AGE").
$res = $DB->fetchArray ('clients', array ("NAME" = "John", ">=AGE" => 25), array ("NAME", "AGE"));
Le quatrième et dernier paramètre des méthodes fetchArray et fetchFirst fetch est l'ordre de tri. Il est également spécifié soit par une chaîne (type: "ID ASC, NAME DESC") ou un tableau de tableaux ("ID" => "ASC", "NAME" => "DESC").
$res = $DB->fetchArray ('clients', array ("NAME" = "John", ">=AGE" => 25), array ("NAME", "AGE"), array ("ID" => "ASC", "NAME" => "DESC"));
Eh bien, en terminant avec les données que vous demandez - et comment limiter la sélection? Par exemple, seules les 10 premières entrées sont nécessaires?
Cela se fait en utilisant la méthode setLimit (), comme ceci:
$DB->setLimit (10); $res = $DB->fetchArray ('clients', "NAME = 'John'");
La méthode setLimit () fonctionne sur une seule demande, après quoi les limites sont réinitialisées.
Insérer de nouvelles données
Il existe une méthode
insert () pour écrire de nouvelles données.
$id = $DB->insert ('clients', array ("NAME" => 'Peter', "AGE" => 27, "AMOUNT" => 1000.25));
Il renvoie la valeur de la clé d'incrémentation automatique principale (si une est spécifiée dans le tableau). Dans notre cas, il renverra l'ID de l'enregistrement inséré.
Mise à jour des données
Les données sont mises à jour à l'aide de la méthode
update () .
$DB->update ('clients', array ("NAME" => 'Peter'), array ("AGE" => 30, "AMOUNT" => 2000.25));
Nous avons mis à jour tous les enregistrements dont le nom (champ NOM) est «Peter». Le deuxième argument de la méthode est la condition de sélection, exactement au même format que WHERE pour SELECT. Eh bien, le troisième argument de la méthode est les données elles-mêmes. Désormais, tous ces enregistrements avec le nom «Peter» auront 30 ans et la somme sera de 2000,25.
Suppression de données
Si vous avez déjà compris la logique de la bibliothèque, la suppression sera très simple. La méthode est appelée
delete () .
$DB->delete ('clients', array ("NAME" => 'Peter'); // 'Peter' $DB->delete ('clients', array (">AGE" => '20'); // 20.
Voici une première brève excursion dans la bibliothèque exDBase. Il existe un certain nombre d'autres fonctionnalités plus avancées, mais plus à ce sujet une autre fois.
UPD:
Vous pouvez télécharger le fichier sur GitHubBon code à tous!