Failles SQL?

Résolu/Fermé
MickaToast Messages postés 142 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 23 juillet 2015 - Modifié par MickaToast le 20/02/2014 à 00:25
MickaToast Messages postés 142 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 23 juillet 2015 - 20 févr. 2014 à 10:06
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).
$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 !
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
20 févr. 2014 à 01:03
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,
1
MickaToast Messages postés 142 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 23 juillet 2015 24
Modifié par MickaToast le 20/02/2014 à 01:24
J'ai bien ajouté ta ligne de code et mon code fonctionne bien.
Par contre j'aimerais bien que tu m'expliques ce que signifie tout ce charabia, car je suis débutant en PHP et je n'ai jamais vu ce "setAttribute" et ce "ATTR_EMULATE_PREPARES".

En tout cas, je te remercie beaucoup pour ton aide ;)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
20 févr. 2014 à 01:28
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,
0
MickaToast Messages postés 142 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 23 juillet 2015 24
20 févr. 2014 à 10:06
D'accord, merci beaucoup pour ton aide !

Bonne journée.
0