requête préparée avec ? qui ne fonctionne pas

Répondre


Veuillez compléter la vérification suivante afin de nous permettre de lutter contre les publications automatisées indésirables.
Émoticônes
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Accéder à davantage d’émoticônes
  Relecture du sujet
 

  Agrandir Relecture du sujet : requête préparée avec ? qui ne fonctionne pas

Re: requête préparée avec ? qui ne fonctionne pas

par @rthur » 19 mars 2017, 22:40

La raison est un peu bizarre, mais c'est logique que ça ne fonctionne pas avec LIMIT

En réalité, quand on utilise PDO::execute() les paramètres qui sont injectés le sont sous la forme de chaine de caractères c'est à dire avec des guillemets et donc ta requête devient :
DELETE FROM news WHERE type='toto' LIMIT '2'
Ce qui n'est pas correcte.

La solution est d'utiliser bindValue() en précisant que le paramètre est un entier pour que la variable soit passée sans guillemet
$bdd->bindValue('limit_val', $num, PDO::PARAM_INT);

Re: requête préparée avec ? qui ne fonctionne pas

par or 1 » 19 mars 2017, 21:43

possible qu'il ne soit pas possible de passer ainsi le paramètre du limit, il faut donc faire :
$sup = $bdd->prepare("DELETE FROM news WHERE type=? LIMIT $num");
en ayant au préalable vérifier le contenu de $num

requête préparée avec ? qui ne fonctionne pas

par jfab66 » 19 mars 2017, 21:37

bonjour,

Code : Tout sélectionner

$sup = $bdd->prepare(' DELETE FROM news WHERE type=? LIMIT 2'); $sup->execute(array($type));
la requette ci dessus fonctionne : elle efface les 2 plus anciennes données de ma bdd qui correspondent au 'type' qui a été déterminé dans un formulaire et enregistré dans la variable $type

VOICI mon PROBLEME :

Code : Tout sélectionner

$sup = $bdd->prepare(' DELETE FROM news WHERE type=? LIMIT ?'); $sup->execute(array($type,$num));
cette requete ne fonctionne pas quand je fixe la LIMIT avec un ? qui sera renseigné dans le même formuliare ... :(