Accueil > Forum > > > > Class requêtes
Class requêtes
mercredi 28 octobre 2009 à 08:49:58 |
Class requêtes

eltyty
|
Bonjour,
je souhaiterai avoir votre avis quant à la pertinence de ma classe. Il s'agit d'une classe pour l'insertion dans une table. Je souhaitais utiliser prepare pour optimiser cette requête mais j'espère avoir bien compris.
Donc voici le code et merci pour vos avis et conseil.
Code PHP :
class requetes{
function __construct(){
$this->connexion=SPDO::getInstance();
}
/**
* MISE À JOUR ET INSERTION DANS UNE TABLE
**/
PUBLIC FUNCTION modifyTable($table, array $set, $condition = NULL) {
IF(!EMPTY($condition)) {
try{
array_walk($set, create_function('&$val, $key', '$val = "$key = \'$val\'";'));
$this->req="UPDATE ".$table." SET " . implode(", ", $set) . " WHERE ".$condition;
$this->connexion->exec($this->req);
}
catch(PDOException $e) {
throw new myException("Erreur de mise à jour = ".$this->sql." <u>Message</u> : ".$e->getMessage());
}
}
ELSE {
try{
$nb=count(array_keys($set));
$tab=array_keys($set);
$this->sql = "INSERT INTO ".$table." (" . implode(", ", array_keys($set)) . ") VALUES (:".implode(", :", array_keys($set)).")";
$this->statement = $this->connexion->prepare($this->sql);
FOR ( $i=0; $i<$nb; $i++ ){
$this->statement->bindParam(':'.$tab[$i], $set[$tab[$i]]);
}
$this->statement->execute();
}
catch(PDOException $e) {
throw new myException("Erreur d'insertion = ".$this->sql." <u>Message</u> : ".$e->getMessage());
}
}
}
}
Et voici comment je l'intérroge :
-L'ajout
Code PHP :
$set = array();
$set["date_erreur"] = addslashes("text");
$set["texte_erreur"] = addslashes("texte 2");
$requete_table->modifyTable("table", $set);
-La modification
Code PHP :
$set = array();
$set["date_erreur"] = addslashes("texte");
$set["texte_erreur"] = addslashes("text 2");
$valeur_recherche= addslashes("clef de recherche");
$requete_table->modifyTable("table", $set, "texte_erreur='".$valeur_recherche."'");
Merci pour vos suggestions et vos amélioration. J'aimerai bien que cela me serve de base et que le traitement soit optimiser.
|
|
mercredi 28 octobre 2009 à 16:12:01 |
Re : Class requêtes

neigedhiver
|
Salut,
J'ai du mal à comprendre ton array_walk() avec create_function(). Ce serait pas plus clair avec un foreach ? (et plus performant par la même occasion, j'ai déjà benché : array_walk() est lent).
Je pense qu'il serait plus propre d'avoir 2 méthodes distinctes pour l'insertion et pour la mise à jour (mais c'est mon avis perso, hein).
Je ne comprends pas pourquoi ta classe n'étend pas, tout simplement, PDO (ou SPDO qui semble être ta classe étendue). Ca me semblerait plus simple, plus cohérent, mais là encore, libre à toi d'écrire ta classe en suivant le motif de conception de ton choix.
Dans l'utilisation, il n'est pas nécessaire d'utiliser la fonction addslashes() puisque la méthode prepare() de PDO s'occupe d'échapper les caractères spéciaux (y compris les guillemets si besoin est). Ca fait doublon, quoi, mais c'est pas une faille ou une réelle erreur (ça ne plantera pas, et ça ne rendra pas le code plus ou moins vulnérable).
L'utilisation des blocs try...catch ne me parait pas nécessaire, puisque je ne crois pas que PDO::exec() lance d'exception : il n'y a donc rien à attraper... Par contre, vérifier que la requête s'est bien exécutée en comptant le nombre de ligne affectées (attention, en cas d'update, la valeur retournée peut parfois surprendre, notamment lors de l'utilisation de ON DUPLICATE KEY...)
Les noms des fonctions et les mots clés sont supposés être écrits en minuscules (PHP est sensible à la casse, il est fort possible que PHP renvoit des erreurs de type WARNING, mais que la configuration ne les affiche pas).
Euh voilà tout ce que je peux en dire pour le moment ;)
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
mercredi 28 octobre 2009 à 16:39:35 |
Re : Class requêtes

eltyty
|
Et bien ça fait beaucoup de chose. Par contre comment veut tu remplacer ma fonction array_walk() avec create_function() par foreach ?
Quant au fait de mettre try catch et ça me lance une exception en cas d'erreur
Toi tu utilise une class de se genre ? car sur le net je ne trouve pas d'exemple donc c'est pas évident
Merci pour ces infos je vais essayer de rectifier ça  même si j'aimerai bien avoir des exemples
Bonne journée
|
|
mercredi 28 octobre 2009 à 18:02:45 |
Re : Class requêtes

neigedhiver
|
array_walk() parcourt un tableau pour appliquer une fonction sur chaque élément du tableau. Donc, ça, on peut le faire avec foreach(). Quant à create_function(), étant donné ta fonction anonyme, il est tout à fait possible de la remplacer par... du code PHP qui fait la même chose. Mais j'ai du mal à voir ce que tu veux faire avec cette fonction anonyme...
Ton bloc try...catch ne va jamais lancer d'exception, parce qu'il n'en interceptera jamais. Les fonction PDO::exec() et PDOStatement::execute() renvoient uniquement un booléen et ne lancent pas d'exception. Ton bloc try...catch est donc inutile : il faut vérifier si la fonction s'exécute correctement ou non (si elle renvoit TRUE ou FALSE) pour savoir si une erreur s'est produite.
PDO::__construct() lance une exception, mais elle est en dehors de tes bloc try...catch
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
mercredi 28 octobre 2009 à 20:16:06 |
Re : Class requêtes

kohntark
|
Salut,
Ton bloc try...catch ne va jamais lancer d'exception, parce qu'il n'en interceptera jamais. Les fonction PDO::exec() et PDOStatement::execute() renvoient uniquement un booléen et ne lancent pas d'exception.
Toutes deux peuvent lever des exceptions, tout dépend du traitement demandé (via PDO::ATTR_ERRMODE)
Cordialement,
Kohntark -
|
|
mercredi 28 octobre 2009 à 20:27:04 |
Re : Class requêtes

neigedhiver
|
Ok. Au temps pour moi (une fois de plus pfffffffffffffffff). C'est que je ne configure jamais cette option, je laisse par défaut la valeur à ERRMODE_SILENT.
Mais encore une fois de plus supplémentaire (et sans vouloir faire de pléonasme) quand on n'a pas toutes les infos sur ce que fait/veut la personne, on fait c'qu'on peut avec c'qu'on a ^^ (ça, c'est pour mon autodéfense)
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
mercredi 28 octobre 2009 à 21:31:01 |
Re : Class requêtes

eltyty
|
ok merci pour ces infos. En fait je cherche à produire une classe regroupent toutes les fonctions d'action sur une table : add, supp et up
Il est vrai que j'avais l'option PDO::ATTR_ERRMODE donc un message avec try catch
Je vais essayer d'optimiser tout ça alors. Par contre qq'un connaît une classe similaire à ce que je veux faire car j'ai beau chercher
Merci déjà.
|
|
jeudi 29 octobre 2009 à 06:27:08 |
Re : Class requêtes

neigedhiver
|
Ce que tu veux faire, c'est implémenter le modèle CRUD (Create / Read / Update / Delete). Et des classes basées sur PDO qui implémentent ce modèle, ça doit déjà exister... jette un oeil par là : http://www.google.fr/#q=crud+pdo
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
jeudi 29 octobre 2009 à 08:34:03 |
Re : Class requêtes

eltyty
|
Encore une fois merci, pffff ... je ne connaissais pas le terme CRUD donc toutes mes recherches étaient vaines
mais grâce à toi je pense que j'ai trouver un exemple qui m'aidera sûrement.
Penses-tu que cet exemple est un bonne exemple à suivre ? : http://www.phpro.org/classes/PDO-CRUD.html
Merci et bonne journée.
|
|
jeudi 29 octobre 2009 à 21:50:42 |
Re : Class requêtes

eltyty
|
Je reviens vers ce sujet car après avoir trouvé une class sympa, je trouve des difficultés à utiliser cette fonction :
Code PHP :
PUBLIC FUNCTION queryObjectArray() {
try {
$this->stmt->execute();
while ($result = $this->stmt->fetch(PDO::FETCH_OBJ)) {
$resultsObjectArray[] = $result;
}
if (isset($resultsObjectArray)) {
return $resultsObjectArray;
}
}
catch (PDOException $e) {
printf("<p>Exception: %s</p>\n", $e->getMessage());
exit();
}
}
La requête préparé est correct mais je n'arrive pas à afficher quoi que ce soit.
Code PHP :
$db->select('*', 'rubriques', 'id_rubrique > ?');
$db->bindValues(array('8'));
$rows = $db->queryObjectArray();
$nb=count($rows);
$nb me donne bien le nombre correct mais ça :
Code PHP :
for ($i=0;$i<$nb;$i++){
echo $i." - Test ".$rows['id_rubrique']."<br />";
}
ne donne rien... et j'ai essayer plusieurs autre manière. Là je ne comprend pas.
Pour infos, il s'git de la class : http://oopgarden.richardknop.com
Si qq'un peux me dire s'il estime cette classe correcte et comment faire pour afficher la liste via cette fonction. Merci.
|
|
Cette discussion est classée dans : set, table, code, erreur, array
Répondre à ce message
Sujets en rapport avec ce message
pepin avec un mysql_fetch_array() [ par justine75 ]
bonjour!voilà j'ai un petit problème que je n'arrive pas à éluciderle voici : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL res
erreur php [ par zebu238 ]
Bonjour,Celà fait quelques heures que je bute sur une erreur qui doit être toute bête.[code]while($array = mysql_fetch_array-($requete)){ echo'
Besoin d'aide pour comprendre Array_walk [ par eltyty ]
Bonjour, j'ai vu dans google code la ligne suivante : [code=php] array_walk($set, create_function('&$a', 'if(isset($a)): $a = "\'".AddSlashes($a)."\'
Message d'erreur [ par docteursas ]
Salut à tous, j'ai un probleme avec un code. J'utilise un fichier include.php pour appeler d'autres page sur ma page index.php voici le code dans le f
recherche bdd et mise a jour dans la table [ par Jarod1980 ]
Bonjour, Je suis en train de mettre en place une petite application permettant de rechercher une personne dans ma base de données. Une fois la person
erreur de codage avec une condition si dans tableau (td) [ par sebing ]
Bonjour, Je souhaite rajouter une condition à mon tableau. je voudrais que le lien "modifier" apparaissent que si c'est le membre qui est connecter.
affichage d'une erreur lors de connection a ma base de données [ par jcoq6340 ]
slt, je viens de débuter avec php. voila mon problème ce code permet de saisir des infos(un pseudo et un message) et les sauvegarder dans une base de
bonjour, petit soucis une erreur bete je pense [ par jerome33610 ]
Bonjour, Pouvez-vous m'éclairer ? J'ai une erreur mais je ne met pas le doigt dessus, voyez ci-dessous voici l'erreur trouvé : Warning: mysql_fetch
erreur : Warning: mysql_fetch_row() [ par laloire33150 ]
Bonjour, j'ai une erreur que je ne trouve pas, pouvez vous m'aider : erreur : [code=autre]Warning: mysql_fetch_row(): supplied argument is not a va
Problème simple de tableau (enfin je pense) [ par wiz4rd ]
Bonjour, j'ai un soucis quand j'utilise la fonction [url=http://www.manuelphp.com/php/function.array-multisort.php]array_multisort()[/url]: Voici le
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
XML ET PHPXML ET PHP par karouani
Cliquez pour lire la suite par karouani
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|