Mushr00m Posted June 28, 2011 Share Posted June 28, 2011 Bonsoir à tous !J'ai besoin de vos lumières sur la classe DB.php.J'ai du mal à bien saisir la différence entre les fonctions Execute() et ExecuteS() dont je n'ai pas trouvé de renseignement dans les commentaires de la classe. J'ai parcouru pas mal des modules pour voir l'utilisation plus concrete et si je comprend bien ExecuteS() va être utiliser pour tout ce qui est requête du type SELECT qui vont retourner des infos, contrairement à Execute() qui va être pour du DELETE, UPDATE etc... Est-ce bien ça ?Mon soucis est pour des requêtes du type COUNT j'ai testé avec ces deux sans succès et je suis donc passé avec GetRow() qui permet de faire fonctionner ma requête (permettant de voir si une entrée existe dans une table).Donc si quelqu'un pouvait donner quelques lumières sur la "bonne" utilisation de telle ou telle fonction cela m'aiderait pour bien développer proprement.Merci a vous Link to comment Share on other sites More sharing options...
Fabien Serny Posted June 29, 2011 Share Posted June 29, 2011 Bonjour,Requêtes pour les Select : // ExecuteS (ou ExecuteSelect) récupère toutes les lignes dans un tableau PHP $sql = 'SELECT * FROM `'._DB_PREFIX_.'table`'; $Arraylist = Db::getInstance()->ExecuteS($sql); // getRow rajoute un LIMIT 1 automatiquement à la requête et ne récupère qu'une seule ligne $sql = 'SELECT * FROM `'._DB_PREFIX_.'table`'; $row = Db::getInstance()->getRow($sql); // getValue rajoute un LIMIT 1 et récupère la première valeur dans une variable (ici ce sera l'id) $sql = 'SELECT `id`, `type` FROM `'._DB_PREFIX_.'table`'; $value = Db::getInstance()->getValue($sql); Requête pour le reste // Execute une requête et renvoie uniquement succès ou erreur, donc on ne peut s'en servir pour récupérer des données de la bdd via un SELECT Db::getInstance()->Execute($sql); // Ajout ou modification peut être fait via autoExecute (plus pratique qu'Execute) Db::getInstance()->autoExecute($myTable, $arrayValue, 'INSERT'); Db::getInstance()->autoExecute($myTable, $arrayValue, 'UPDATE', $where); Link to comment Share on other sites More sharing options...
Mushr00m Posted June 29, 2011 Author Share Posted June 29, 2011 Merci de votre réponse rapide !Cela confirme bien mon sentiment. Donc pour mon exemple du COUNT il vaut mieux utiliser GetValue() pour avoir seulement la variable contenant le résultat du COUNT ?Je me permet de vous poser une dernière question qui je pense pourrait aider d'autres développeurs qui débute sous PS. Avant de sauvegarder une entrée dans la base j'utilise la fonction pSQL() de la classe, elle permet bien de lutter contre les injections et autres hacks SQL ?Encore merci ! Link to comment Share on other sites More sharing options...
Fabien Serny Posted June 29, 2011 Share Posted June 29, 2011 Bonjour,Oui pour le COUNT, il faut mieux utiliser getValue.ExecuteS et getRow fonctionne aussi mais celles-ci retournent des tableau et dans ce cas là ce n'est pas très utile Pour la protection contre les injections :- Pour les textes sans html : pSQL($text);- Pour les textes avec du html : pSQL($text, true);- Pour les int, il suffit de faire (int)$myVarInt;- Pour les float, il suffit de faire (float)$myVarFloat;etc... Link to comment Share on other sites More sharing options...
Mushr00m Posted June 29, 2011 Author Share Posted June 29, 2011 Oui pour pSQL() c'est ce que j'ai trouvé dans les commentaires de la classe, par contre lors de l'enregistrement dans la base d'un INPUT ou d'un TEXTAREA on ne sait pas si l'utilisateur aura tenté d'ajouter de l'HTML (code frauduleux) ou non donc je suppose que par sécurité, il faut surcharger la fonction avec TRUE ?Merci Link to comment Share on other sites More sharing options...
Fabien Serny Posted June 29, 2011 Share Posted June 29, 2011 Non. De base le champs $html est à false (c'est à dire qu'il ne dois pas accepter le HTML)Donc si le champs n'est pas censé recevoir de code HTML, vous devez utilise pSQL($text).Si le champs est censé accepté du html (exemple : description produit), vous devez utiliser pSQL($text, true); Link to comment Share on other sites More sharing options...
Mushr00m Posted June 29, 2011 Author Share Posted June 29, 2011 Merci beaucoup pour toutes vos réponses !Cordialement Link to comment Share on other sites More sharing options...
Fabien Serny Posted June 29, 2011 Share Posted June 29, 2011 De rien Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now