Skip to content

Sparksx/pdo_request_creator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PDO_request_creator

PDO_request_creator est un enssemble de classes permetant au jeunes développeurs de manipuler facilement leurs bases de données, et ce en toutes sécurité.
En effet, les requètes sont faite à l'aide de PDO et sont des requètes préparées.

=================== Le wiki est en cours de réalisation. Trouvez ci-aprés quelques explications.

===================

La configuration est simple et se trouve dans config/databases.php


Toutes les requetes se construises de façon statique. (Requete::...)
Il existe un mode debug pour toutes les requetes, mais il est encore un peu bancale ; J'y travail.

Dans la classe Requete, il y a 2 gros racourci interessant :
###Le select_all

$resultat = Requete::select_all('articles', NULL, 'tarif_ht', 5);   
// SELECT * FROM articles WHERE `tarif_ht` = :marqueur0;    
// Cette ligne créer une requete permettant de recupérer toutes les lignes de la table article dont la colonne 'tarif_ht' est égale à 5
$resultat = Requete::select_all('articles', NULL, array(    
	'tarif_ht' => 10,    
	'description' => 'bleu'    
));   
// SELECT * FROM articles WHERE `tarif_ht` = :marqueur0 AND `description` = :marqueur1;    
// Cette ligne créer une requete permettant de recupérer toutes les lignes de la table article dont la colonne 'tarif_ht' est égale a 10 ET la valeur de la colonne 'description' est bleu     
// NOTE : Toutes les conditions seront assamblés avec l'opérateur AND     

######Valeur de retour :

  • FALSE : Aucun resultat ne correspond à la demande
  • Array : Tableau contenant le ou les resultats correspondants

il y a donc 2 façons d'utiliser la même fonction.

#####Pour debuger :

$resultat = Requete::select_all(table, donnees, ligne, valeur, false, true);

false (5ème paramètre) : récupère toutes les lignes (à true, seule la première ligne est récupérée)
true (6ème paramètre) : true = mode debug activé


###Le select_one

$resultat = Requete::select_one('articles', NULL, 'tarif_ht', 5);    
// SELECT * FROM articles WHERE `tarif_ht` = :marqueur0;
// Cette ligne créer une requete permettant de recupérer la première ligne de la table article dont la colonne 'tarif_ht' est égale à 5

Le select_one s'utilise de la même façon que le select_all (Les conditions multiples sont aussi accessibles)
Le debug du select_one est le 5ème paramètre (true/false)

===================

Dans le cas ou ces selecteurs basique ne sufisent pas, il est possible de créer des requetes avancés :
(Les requetes update, remove et insert reposent sur le même moteur que select)

La selection de la ou les tables visées peux se faire de 2 manières :

  • Par le constructeur :
$requeteTypeSelect = Requete::select();
// Le constructeur possède un paramètre facultatif : la ou les tables visé.
$requeteTypeSelect = Requete::select('articles');
$requeteTypeSelect = Requete::select(array('articles', 'articles_famille'));
  • Par les méthodes :
// Il est également possible de selectionner la ou les tables au travers des fonctions table et tables
$requeteTypeSelect->table('panier_ligne');
$requeteTypeSelect->tables(array('panier_ligne', 'panier_entete'));

La selection des données se fait par l'une des méthodes "donnees" ou "donnee"

// A partir de l'objet créé, on peux définir quels données on souhaite récuperer :
$requeteTypeSelect->donnee('tarif_ht');
$requeteTypeSelect->donnees(array('designation', 'nom', 'article_famille.id_famille'));
// Si vous n'utilisez pas la fonction donnee(s), toutes les colonnes seront alors récupéré (SELECT * ...)
// Si vous demandez à récupérer une colonne qui n'existe pas (en dehors d'une fonction), celle ci seras ignoré
$requeteTypeSelect->donnee('COUNT(id_famille) AS nombreDeFamille');
// Les fonctions sont utilisables tels quels

La definition des conditions :

// Il est possible de definir des conditions tels que :
$requeteTypeSelect->condition('AND', 'tarif_ht', '>', 20);
// Comme pour select_all il est possible de passer un tableau de condition (Colle AND) : 
$requeteTypeSelect->conditions(array(
	'colonne' => 'valeur'
));
// Ou bien d'ecrire manuellement une condition (complexe ou pas)
$requeteTypeSelect->conditionString('id_article IN(30, 45, 56, 54)');
$requeteTypeSelect->conditionString('OR designation LIKE "%biere%"');
// Attention à sécuriser les variables passé dans ces conditions avec addslashes

Gestion de l'ordre :

// Il est possible de definir l'ordre de tri (ORDER BY)
$requeteTypeSelect->orderBy('tarif_ht', 'DESC', true);
// L'ordre par defaut est ASC
// Le dernier paramètre permet de dire si il faut verifier ou non l'existance de la colonne
// Il est utile dans le cas ou l'on utilise une fonction (COUNT(id_famille) AS nombreDeFamille) et que l'on veux trier en fonction du resultat (nombreDeFamille)

Limite de récupération :

// La limit est egalement utilisable :
$requeteTypeSelect->limite(0, 10);
// Ne récupèrera que les 10 premières lignes

Groupement :

// Il est aussi possible de grouper les données :
$requeteTypeSelect->groupBy('id_famille');

####Quelques exemples commenté :

$selectArticles = Requete::select('articles');
$selectArticles
	->condition('OR', 'designation', 'LIKE', '%'._RECHERCHE_.'%')
	->condition('OR', 'description', 'LIKE', '%'._RECHERCHE_.'%')
	->order(array('colonne' => 'tarif_ht', 'ordre' => 'ASC'));

$selectArticles->debug(); // Permet de debuger la requete

$articles = $selectArticles->execute();
// Selectionne tout les données des articles dont la designation ou la description contient la constante _RECHERCHE_ et tri les resultats par tarif_ht croissant

$supprimeLignesPanier = Requete::remove('panier_ligne');
$supprimeLignesPanier->condition('AND', 'id_panier', '=', $idPanierClient);
$supprimeLignesPanier->execute();
// Supprime toutes les lignes où 'id_panier' est égale à $idPanierClient dans la tables panier_ligne
// Pour les suppression, seul les conditions sont utilisés

$creerNouveauPanier = Requete::insert('panier_ligne');
$creerNouveauPanier->donnees(array(
	'id_panier' => 5,
	'id_article' => 18453,
	'quantite' => 2
));
$creerNouveauPanier->execute();
// Création d'une nouvelle ligne dans le panier, avec les valeurs passé dans les variables
// Pour les insertion, seul les données sont utilisés

$modifierLignePanier = Requete::update('panier_ligne');
$modifierLignePanier->donnees(array(
		'quantite' => 10
	))
	->condition('AND', 'id_article', '=', $id_article)
	->condition('AND', 'id_panier', '=', $idPanierClient);

$modifierLignePanier->execute();
// Modifie la quantité des lignes du panier lorsque l'id_panier et l'id_article sont égales à ceux passés
// Pour les modifications, seuls les données et les conditions sont utilisé

###Todo-list

  • Transcription en Anglais (Anglais et français disponible)
  • Gestion des multi-insertions (préparation -> insertion)
  • Amélioration des statistiques
  • Amélioration de la gestion des érreurs
  • Meilleur gestion des jointures

About

Phph class to create secure sql request

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages