[RESOLU] probleme INSERT

Eléphant du PHP | 345 Messages

22 févr. 2023, 12:53

$pdostat = $bdd->prepare("SELECT nom_pays FROM pays LEFT JOIN membres ON pays.pos_x_map = membres.pos_x AND pays.pos_y_map = membres.pos_y WHERE membres.id=:id");
$pdostat->bindvalue(':id',$idMembreSession ,PDO::PARAM_INT);
$pdostat->execute();
$membreSession  = $pdostat->fetch();    
if (!empty($membreSession)) { 
$nom_pays = $membreSession['nom_pays'];
}
$annonce= "UNE CENTRALE NUCLEAIRE A ÉTÉ NATIONALISÉE";
$sql= "INSERT INTO WNN (annonce, lieu) VALUES ('$annonce',  'A $nom_pays')";
$prep =  $bdd->prepare($sql);
$prep->bindvalue(':annonce',$annonce,PDO::PARAM_STR);
$prep->bindvalue(':lieu',$nom_pays,PDO::PARAM_STR);
$prep->execute();
Invalid parameter number: number of bound variables does not match number of tokens in /home/clients/78f15c36

Je ne saisis pas d'ou vient l'erreur

ynx
Mammouth du PHP | 586 Messages

22 févr. 2023, 12:56

Ta requête n'est pas préparée correctement, il faut utiliser des marqueurs nommés dans ta requête (:annonce, :lieu) et pas directement les variables php ($annonce, $nom_pays).
Voir https://www.php.net/manual/fr/pdo.prepare.php

Eléphant du PHP | 345 Messages

22 févr. 2023, 19:30

J'ai le meme message erreur en modifiant ainsi
$annonce= "UNE CENTRALE NUCLEAIRE A ÉTÉ NATIONALISÉE";
$sql= "INSERT INTO WNN (annonce, lieu) VALUES (:annonce, A:nom_pays)";
$prep =  $bdd->prepare($sql);
$prep->bindvalue(':annonce',$annonce,PDO::PARAM_STR);
$prep->bindvalue(':lieu',$nom_pays,PDO::PARAM_STR);
$prep->execute();

Mammouth du PHP | 2703 Messages

22 févr. 2023, 19:36

$sql= "INSERT INTO WNN (annonce, lieu) VALUES (:annonce, A:nom_pays)";
il y a du mieux mais un caractère en trop.

Eléphant du PHP | 345 Messages

22 févr. 2023, 19:37

oups, voilà qui est mieux !
$annonce= "UNE CENTRALE NUCLEAIRE A ÉTÉ NATIONALISÉE À";
$sql= "INSERT INTO WNN (annonce, lieu) VALUES (:annonce, :lieu)";
$prep =  $bdd->prepare($sql);
$prep->bindvalue(':annonce',$annonce,PDO::PARAM_STR);
$prep->bindvalue(':lieu',$nom_pays,PDO::PARAM_STR);

$prep->execute();