Jump to content

[Résolu] Utilisation des fonctions MySQL


Recommended Posts

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

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

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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...