[RESOLU] enigme sur update

Eléphant du PHP | 345 Messages

29 mars 2021, 01:21

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 ''

Eléphant du PHP | 53 Messages

29 mars 2021, 04:14

Salut

Et si tu enlèves le ( : ) ça fait quoi ?
info = "Tout va bien pour vous."
Pourquoi faire simple quand on peut faire compliqué ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 mars 2021, 10:27

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 ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 345 Messages

29 mars 2021, 11:58

La constante ne fonctionnant toujours pas, j'ai modifié/déclaré la variable $info en amont et avec le bind ça fonctionne.
Merci !!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 mars 2021, 12:20

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.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...