Page 1 sur 1

enigme sur update

Posté : 29 mars 2021, 01:21
par nestor94
Bonjour,
quelqu'un pourrait-il m'expliquer pourquoi cet update ne fonctionne pas???
$pdostat =  $bdd->prepare('UPDATE membres SET qte_contenant = :qte_contenant-1, usure_contenant= :usure_contenant+1, PA = :PA-1, VIE =:VIE+1, FIGHT =:FIGHT+2, info =: "Tout va bien pour vous."   WHERE id = :id');
   	   $pdostat->bindValue(':qte_contenant', $qte_contenant, PDO::PARAM_INT);
	   $pdostat->bindValue(':usure_contenant', $usure_contenant, PDO::PARAM_INT);
	   $pdostat->bindValue(':PA', $PA, PDO::PARAM_INT);
	   $pdostat->bindValue(':VIE', $VIE, PDO::PARAM_INT);
	   $pdostat->bindValue(':FIGHT', $FIGHT, PDO::PARAM_INT);
   	   $pdostat->bindValue(':info', $info, PDO::PARAM_STR);
       $pdostat->bindValue(':id', $id, PDO::PARAM_INT);
       $pdostat->execute();
Quand je vire le dernier paramètre info =: "Tout va bien pour vous." la requete fonctionne...
le champ "info" en table: info varchar(100) utf8_general_ci not null ''

Re: enigme sur update

Posté : 29 mars 2021, 04:14
par j_saisrien
Salut

Et si tu enlèves le ( : ) ça fait quoi ?
info = "Tout va bien pour vous."

Re: enigme sur update

Posté : 29 mars 2021, 10:27
par Ryle
Salutations !

En effet, dans ton update il faut soit passer une constante (info = "Tout va bien pour vous."), soit passer une variable (info = :info) qui prendra alors la valeur de $info au moment du bind ( $pdostat->bindValue(':info', $info, PDO::PARAM_STR))

Le mélange des deux va difficilement pouvoir fonctionner ;)

Re: enigme sur update

Posté : 29 mars 2021, 11:58
par nestor94
La constante ne fonctionnant toujours pas, j'ai modifié/déclaré la variable $info en amont et avec le bind ça fonctionne.
Merci !!

Re: [RESOLU] enigme sur update

Posté : 29 mars 2021, 12:20
par Ryle
Cool !

Et pour la constante, je pense que c'est une question de guillemets. En SQL, il faut délimiter les chaines avec des apostrophes et non des guillemets.

Ceci devrait fonctionner :
$pdostat =  $bdd->prepare('UPDATE membres SET qte_contenant = :qte_contenant-1, usure_contenant= :usure_contenant+1, PA = :PA-1, VIE =:VIE+1, FIGHT =:FIGHT+2, info = \'Tout va bien pour vous.\'   WHERE id = :id');
A noter, les apostrophes qui délimitent la constante doivent être protégées par un \ puisque la chaine de caractères contenant la requête est délimitée par des apostrophes.