Requête SQL

Nouveau WRInaute
Bonjour à tous et bonne année,
je voudrais savoir s'il on peut optimiser mes requêtes SQL ci-après ?
Je ne suis pas spécialiste, mais je trouve que mon site rame un peu....

Code:
$query_nbrsites = "SELECT compteur FROM annuaire_sites WHERE valid=1 and (";
						$nbr_cat = sizeof($list_cat);
						for ($nbc=0;$nbc<$nbr_cat-1;$nbc++)
							{ $query_nbrsites .= "category = '$list_cat[$nbc]' or "; }
						$query_nbrsites .= "category = '$list_cat[$nbc]')";
						$res_nbrsites=mysql_query($query_nbrsites,$db);
						$nbrsites=mysql_num_rows($res_nbrsites);
						$list_cat="";
Et :
Code:
	$res_cat_racine=mysql_query("SELECT * FROM annuaire_cat WHERE inside='".$_GET['id']."' ORDER BY name ASC",$db);

Pour finir :

Code:
$res_site=mysql_query("SELECT compteur, title, url, description, owner, mail, date_ins FROM annuaire_sites WHERE category='".$_GET['id']."' and valid=1 and premium=0 ORDER BY date_ins DESC, hour_ins DESC",$db);

Merci d'avance....
 
WRInaute occasionnel
Bonjour et bonne année !

Optimiser ou sécuriser ?
Car la tu as risque d'injection SQL...

Après tu peux évoluer et utiliser PDO.
Car Mysql date un peu :)
 
Nouveau WRInaute
-Romu- a dit:
Bonjour et bonne année !

Optimiser ou sécuriser ?
Car la tu as risque d'injection SQL...

Après tu peux évoluer et utiliser PDO.
Car Mysql date un peu :)

Bonsoir,
les deux alors pourquoi pas. Je ne connait pas trop le SQL.
Pourrais-je avoir un exemple PDO sur une de mes requêtes et j'adapterai en fonction

Merci
 
WRInaute impliqué
Bonsoir !
Moi aussi je voudrai bien un exemple en PDO ou avec mysqli, et aussi (voire surtout) une explication sur le pourquoi de la suppression à venir de mysql ? J'ai un peu lu php.net sur la question mais j'avoue que pour me motiver à passer le pas…
Merci :)
 
WRInaute impliqué
Mysql sera pas supprimer. C'est juste que PDO permet de gérer plus efficacement et sans moins de risque les requêtes.


Sinon oui, il a raison, ton code est sujet à injection SQL.

FAcilement compréhensible :
$_GET['id'] est une variable donnée par l'utilisateur, donc il y met ce qu'il veut.
Il faut, au minimum, mettre un mysql_real_escape_string.
 
WRInaute accro
nervusdm a dit:
Mysql sera pas supprimer. C'est juste que PDO permet de gérer plus efficacement et sans moins de risque les requêtes.
Utiliser une classe qui ajoute une couche d'abstraction peut en effet ajouter de la sécurité (quoi que vue l'augmentation de la taille du code ça se discute) mais dans tous les cas c'est rarement plus performant que d'attaquer une fonction native (surtout si ça fait 10 ans qu'elle existe et qu'elle a fait l'objet de mainte attaques et correctifs).
nervusdm a dit:
$_GET['id'] est une variable donnée par l'utilisateur, donc il y met ce qu'il veut.
Il faut, au minimum, mettre un mysql_real_escape_string.
ou la trans-typer .... (Type casting) (int)$_GET['id'] ce qui est beaucoup moins gourmand et tout aussi sécurisant si on a pris le temps de gérer ses clés primaires dans la base.

Mais bon comme on dit faut vivre avec son temps ... :D
 
WRInaute accro
Bah si un id dans une URL n'est pas bon c'est pas moi qui l'ai manipulé bref je fais en sorte que le script continue proprement sans me prendre la tête et sans risquer une injection. Pourquoi se faire "chier" pour un manipulateur alors qu'on peut l'ignorer. De plus envoyer un message d'erreur a un gogo qui fait joujou avec des urls c'est perdre du temps pour rien et ça allège pas le bilan carbone de la planète.

"(int)$variable" renvoie "0" (zéro) si la variable est manipulée donc si ta table a un ID 0 avec des datas adéquates pourquoi se faire chier à sortir l'artillerie lourde pour sécuriser. Notes bien que je le fait aussi bien en POST qu'en GET (pour le numérique).

Maintenant si on parle de variable textuelles intervenant dans une requête, outre le fait que les passer en GET est une grosse connerie de part la visibilité, c'est une autre histoire et il faudra réfléchir un peut plus pour sécuriser le truc.
 
WRInaute impliqué
Oui Zeb a raison c'est évident.
Une ID est forcément numérique. ( enfin, si on reste dans la logique d'auto incrémentation )
Mais je voulais juste mettre en valeur ce côté là ;=)
 
WRInaute impliqué
nervusdm a dit:
Mysql sera pas supprimer. C'est juste que PDO permet de gérer plus efficacement et sans moins de risque les requêtes.

Je lis sur php.net pour mysql_query : Cette extension est obsolète depuis PHP 5.5.0, et sera supprimée dans le futur.

C'est autre chose ? :oops:
 
WRInaute discret
Je note ça dans un coin de mon esprit, pour du back office c'est vrai que c'est une manière rapide de couper court aux traitements (ce n'est pas dans mes habitudes pour du front mais ça se defend)
Ciao
 
WRInaute impliqué
Je lis sur php.net pour mysql_query : Cette extension est obsolète depuis PHP 5.5.0, et sera supprimée dans le futur.
Presque sûr, pour pas dire à 100% sûr, que d'ici 10 ans ça sera encore actif. C'est juste une phrase pour dire "hey les copains, passez sur PDO".

La raison est simple, tu vire le support de mysql_query sur les serveurs, le jour où les update php sont faites, tu as des millions de sites ( et parfaitement fonctionnels pourtant ) qui s'arrêtent.

Mais bon là, je reconnais partir en HS.
 
WRInaute accro
Schwarzer Stern a dit:
Je lis sur php.net pour mysql_query : Cette extension est obsolète depuis PHP 5.5.0, et sera supprimée dans le futur.
Clair que ça a été dit mais bon 1&1 migre tout juste en 5.4.9 et lâche 5.2 donc pour ne parler que d'eux il y a de la marge avant que 5.5 soit le standard. De plus obsolète ne veux pas dire absente.

Après il est fort possible que cela ai été annoncé en vue de php 6 qui ne verra pas le jour si je ne me trompe. Bref ça ajoute encore de la marge.

Ensuite pour un système correctement pensé l'accès a l’entrepôt de données est normalement centralisé ce qui implique de revoir une fonction ou un objet, bref pas vraiment le truc qui peut te mettre en panique avec un soft.
 
Nouveau WRInaute
cris_84 a dit:
Code:
$query_nbrsites = "SELECT compteur FROM annuaire_sites WHERE valid=1 and (";
						$nbr_cat = sizeof($list_cat);
						for ($nbc=0;$nbc<$nbr_cat-1;$nbc++)
							{ $query_nbrsites .= "category = '$list_cat[$nbc]' or "; }
						$query_nbrsites .= "category = '$list_cat[$nbc]')";
						$res_nbrsites=mysql_query($query_nbrsites,$db);
						$nbrsites=mysql_num_rows($res_nbrsites);
						$list_cat="";

Bonsoir,
en attendant PDO j'ai modifié ma requête comme suit :

Code:
$query_nbrsites = "SELECT compteur FROM annuaire_sites WHERE valid=1 and category IN (".implode(", ",$list_cat).")";
$res_nbrsites=mysql_query($query_nbrsites,$db);
$nbrsites=mysql_num_rows($res_nbrsites);
						$list_cat="";
 
Discussions similaires
Haut