Failles SQL?
Résolu
MickaToast
Messages postés
162
Statut
Membre
-
MickaToast Messages postés 162 Statut Membre -
MickaToast Messages postés 162 Statut Membre -
Bonsoir,
J'aimerais savoir si j'ouvre une faille SQL en faisant ceci: (Je pense que oui à 100% mais je veux être sur et certain que c'est la chose à pas faire dans mon cas).
En fait, j'ai essayé de passer par la méthode prepare puis execute mais je n'ai pas réussi à le faire (surement parce que LIMIT ne se suit pas de "="). Voici mon code avec les protections de failles SQL (ce code ne fonctionne pas):
Pour information:
- La variable $_GET["page"] est bien définie.
- En gros, j'aimerais savoir comment définir une LIMIT avec deux variables.
- Je suis débutant en PHP/SQL, j'essaye ici de définir une pagination en fonction de la variable $_GET["page"].
Merci par avance de votre réponse !
J'aimerais savoir si j'ouvre une faille SQL en faisant ceci: (Je pense que oui à 100% mais je veux être sur et certain que c'est la chose à pas faire dans mon cas).
$requete_news=$bdd->query("SELECT * FROM micle_news LIMIT ".($_GET['page']*5).",".(($_GET["page"]+1)*5)."");
En fait, j'ai essayé de passer par la méthode prepare puis execute mais je n'ai pas réussi à le faire (surement parce que LIMIT ne se suit pas de "="). Voici mon code avec les protections de failles SQL (ce code ne fonctionne pas):
$requete_news=$bdd->prepare("SELECT * FROM micle_news LIMIT :debutlimit, :finlimit");
$requete_news->execute(array("debutlimit"=>$_GET["page"]*5, "finlimit"=>($_GET["page"]+1)*5));
Pour information:
- La variable $_GET["page"] est bien définie.
- En gros, j'aimerais savoir comment définir une LIMIT avec deux variables.
- Je suis débutant en PHP/SQL, j'essaye ici de définir une pagination en fonction de la variable $_GET["page"].
Merci par avance de votre réponse !
1 réponse
-
Bonjour,
Pour le premier code, effectivement. Grosse faille => A bannir.
Dans ta syntaxe via prepare(), le problème est qu'il traite tout en string par défaut y compris les paramètres pour la clause limit.
Essaie donc de rajouter : $bdd->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
Cdlt,-
-
C'est juste pour désactiver l'émulation de prepare.
Par défaut, PDO stocke le prepare avant d'envoyer à MySql lorsque tu invoques execute (j'imagine que tu utilises MySql). Ce qui provoque le bug dans certains cas.
On désactive donc cette simulation. Le prepare est donc envoyé directement à MySql qui s'occupera de tester la commande. Sur Google, tu devrais trouver plus d'explications.
Cdlt, -
-