PHP/MySQL - Bonnes pratiques

Rechercher

PHP/MySQL - Bonnes pratiques

Par teebo  -  1 reponse  -  Le 02/02/2012 14:50  -  Editer  - 

Bonjour,

Tout d'abord félicitation pour ce site qui est excellent, il m'a permis de débuter en POO avec php.

J'ai créer une application PHP il y a déjà quelque temps. Les utilisateurs peuvent ajouter du contenu dans la base de données MySQL. Cependant j'ai l'impression de ne m'être pas assez attardé sur les aspects sécurité et performance.

Quand j'insère du contenu dans la base je le passe en principe dans deux fonctions : htmlspecialchars(addslashes($contenu)).

D'où ma question : est-ce une bonne méthode? Je n'ai pas vraiment trouvé de "bonnes pratiques" à ce sujet. Je me suis récemment attardé sur la fonction mysql_real_escape_string .

D'après la doc PHP c'est plutôt celle-ci qu'il faudrait utiliser afin de sécuriser les requetes?

Autre question : j'utilise PHP5 et j'ai vaguement entendu parlé de l'extension mysqli qu'apporte-t-elle réellement?

Serait-il possible utile est performant de créer une classe avec des méthodes pour chaque requêtes? Par exemple (en très simplifié) :

function select($fields, $table, $where){
//traitement des données
$sql = "SELECT $fields FROM d$table WHERE $where";
$req = mysql_query($sql);
$data = mysql_fetch_array($req);
return $data;
}

 

 

Le traitement des données passerais les arguments dans les fonctions citées plus haut...

 

Merci de vos éclaircissements!!

 

Réponses apportées à cette discussion

Par Cyrano  -  Le 02/02/2012 18:30  -  Haut de page  - 

Salut teebo,

pour l'insertion sécurisée de données dans une base MySQL, effectivement la fonction mysql_real_escape_string sera plus efficace que la combinaison des deux précédentes. Pourtant il existe encore mieux que tout ça et c'est une autre extension de PHP. Tu as mentionné mysqli, tu devrais t'intéresser à PDO et aux requêtes préparées. Dans ce cas, tu n'auras pas à te préoccuper des échappements, ce sera automatiquement fait, et un autre avantage est que ce n'est pas limité à MySQL, tu pourras l'utiliser aussi bien avec n'importe quel des SGBD supportés par PHP, et ça en fait pas mal.

Ton idée de classe a du bon : elle mériterait d'être un peu affinée, mais dans l'ensemble, tu pourrais poursuivre dans cette voie. Et je dirais que tu devrais le faire ne serait-ce que pour bien te familiariser avec la POO. Sinon, il existe des myriades de classes d'accès à MySQL, plus ou moins bien faites, plus ou moins efficaces et pus ou moins utilisables, tout ça sur Internet. Si tu regardes par exemple sur phpclasses.org, tu vas trouver des classes pour MySQL jusqu'à la nausée. Donc pour l'instant, ce que tu pourrais faire, ce serait d'établir un modèle identifiant les classes d'un package MySQL pour traiter tes données. Et n'oublie quand même pas un détail : la méthode que tu montres ne comprend qu'un $select pour les champs, un $table et un $where : qu'en serait-il d'un HAVING, GROUP BY ou LIMIT par exemple.

Le cas échéant, n'hésite pas à poser des questions ici, je suis à peu près le seul à répondre, mais je trouverai bien cinq minutes pour ça. Attention cependant, les avis de réponse automatique bafouillent parfois et je ne saurais pas forcément qu'une nouvelle réponse a été postée, ça peut prendre un peu de temps avant que je réagisse.

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |