Page 1 sur 1

Fatal error: Uncaught PDOException: SQLSTATE[42000]

Posté : 31 mai 2019, 12:23
par JulienOo
Bonjour je suis nouveau sur le forum ! Je viens vers vous car depuis quelques jours je tente d'effectuer un système d'update flexible si je peux dire.
Sauf que j'ai toujours l'erreur "Fatal error: Uncaught PDOException: SQLSTATE[42000]" que je n'arrive pas a retirer..
J'ai également fait une version de se code en requête préparé mais sa ne change pas le message d'erreur..
Malgré le fais que j'affiche ma requête je ne vois pas vraiment d'où peu venir l'erreur.
$bdd = new PDO('mysql:host=localhost;dbname=affichage_dynamique;charset=utf8', 'root', 'test');


$id = 123;
$_POST["nom"] = "Nom";
$_POST["date_debut"] = date("Y-m-d");
$_POST["heure_debut"] = date("H:i:m");
$_POST["date_fin"] = date("Y-m-d");
$_POST["heure_fin"] = date("H:i:m");
$_POST["type0"] = "56";

$sql = "'UPDATE _information_publier_ecrans SET
nom_publication = ".$_POST["nom"]." AND
date_debut_publication = ".$_POST["date_debut"]." AND
heure_debut_publication = ".$_POST["heure_debut"]." AND
date_fin_publication = ".$_POST["date_fin"]." AND
heure_fin_publication = ".$_POST["heure_fin"]." AND
type_diapo = ".$_POST["type0"]." AND ";


$compteur = 1;

for ($i=0; $i < 5; $i++)
{
 $informations["type".$i.""] = "type".$i."" ;
 $informations["valeur".$i.""] = "valeur".$i."" ;
}

while ($compteur < 5)
{
  if ($compteur == 1 )
  {
    $sql =$sql."type".$compteur." = ".$informations["type".$compteur.""]." AND
    valeur".$compteur." = ".$informations["valeur".$compteur.""];
  }
  else
  {
    $sql =$sql." AND type".$compteur." = :type".$compteur." AND
    valeur".$compteur." = ".$informations["valeur".$compteur.""];
  }
  $compteur++;
}

echo $sql = $sql." WHERE id = ".$id;
echo "<br />";
echo "<br />";
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$reponse = $bdd->query($sql);
Si vous avez une idée afin d'éclairer ma lanterne sa serais génial ! Merci beaucoup :)

Re: Fatal error: Uncaught PDOException: SQLSTATE[42000]

Posté : 31 mai 2019, 14:44
par Saian
Bonjour, tu as un problème avec SQL donc probablement avec la requête update si ce n'est avec d'emblée lors de la connexion.
Tu dois normalement avoir la ligne à laquelle l'erreur se produit. Si c'est cette ligne $reponse = $bdd->query($sql); c'est bien un problème avec l'update. Tu peux afficher la requête puis la copier et la tester dans phpmyadmin pour voir le message d'erreur sql. Si tu ne comprends pas le message d'erreur tu peux toujours nous afficher le tout et on devrait pouvoir t'aider. Tu peux aussi faire un if (!$response) print_r($bdd->errorInfo());

Re: Fatal error: Uncaught PDOException: SQLSTATE[42000]

Posté : 31 mai 2019, 18:17
par JulienOo
Merci pour ta réponse aussi rapide, l'erreur viens bien de la ligne d'exécution de la requête.
J'ai donc effectuer ce que tu m'a conseiller de faire sur phpmyadmin et en faisant une simulation en sql il me retourne l'erreur :
#1064 - Erreur de syntaxe près de 'date_debut_publication = 2019-05-31 AND heure_debut_publication = 18)' à la ligne 1
voici ce que j'ai entrer :
'UPDATE _information_publier_ecrans SET nom_publication = Nom AND date_debut_publication = 2019-05-31 AND heure_debut_publication = 18:10:05 AND date_fin_publication = 2019-05-31 AND heure_fin_publication = 18:10:05 AND type_diapo = 56 AND type1 = type1 AND valeur1 = valeur1 AND type2 = :type2 AND valeur2 = valeur2 AND type3 = :type3 AND valeur3 = valeur3 AND type4 = :type4 AND valeur4 = valeur4 WHERE id = 123'
Merci beaucoup :)

Re: Fatal error: Uncaught PDOException: SQLSTATE[42000]

Posté : 31 mai 2019, 18:22
par Saian
Alors simplement sur une requête d'INSERT ou d'UPDATE on utilise pas les AND pour séparer les champs mais la virgule. Le AND c'est dans les WHERE ou avec les JOIN dans le ON. ;)

EDIT : oui et aussi tout ce qui n'est pas numérique se met entre apostrophes (qu'il faut échapper s'il y en a dans la valeur)
column = 'value'

Re: Fatal error: Uncaught PDOException: SQLSTATE[42000]

Posté : 31 mai 2019, 18:36
par JulienOo
Merci pour ta réponse. :)
J'ai modifier le code comme tu me la conseiller j'ai également retirer un ":" qui se promener par là O_o..
J'ai également remplacer les ":" pour l'heure avec des "-" phpmyadmi n'avais pas l'air de les apprécier.
$id = 123;
$_POST["nom"] = "Nom";
$_POST["date_debut"] = date("Y-m-d");
$_POST["heure_debut"] = date("H-i-m");
$_POST["date_fin"] = date("Y-m-d");
$_POST["heure_fin"] = date("H-i-m");
$_POST["type0"] = "56";

$sql = "'UPDATE _information_publier_ecrans SET
nom_publication = ".$_POST["nom"].",
date_debut_publication = ".$_POST["date_debut"].",
heure_debut_publication = ".$_POST["heure_debut"].",
date_fin_publication = ".$_POST["date_fin"].",
heure_fin_publication = ".$_POST["heure_fin"].",
type_diapo = ".$_POST["type0"].", ";


$compteur = 1;

for ($i=0; $i < 5; $i++)
{
 $informations["type".$i.""] = "type".$i."" ;
 $informations["valeur".$i.""] = "valeur".$i."" ;
}

while ($compteur < 5)
{
  if ($compteur == 1 )
  {
    $sql =$sql."type".$compteur." = ".$informations["type".$compteur.""]." ,
    valeur".$compteur." = ".$informations["valeur".$compteur.""];
  }
  else
  {
    $sql =$sql." , type".$compteur." = type".$compteur." ,
    valeur".$compteur." = ".$informations["valeur".$compteur.""];
  }
  $compteur++;
}

echo $sql = $sql." WHERE id = ".$id."'";
echo "<br />";
echo "<br />";
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$reponse = $bdd->query($sql);
if (!$response) print_r($bdd->errorInfo());


en exécutant se code il me renvoie la requête :
'UPDATE _information_publier_ecrans SET nom_publication = Nom, date_debut_publication = 2019-05-31, heure_debut_publication = 18-29-05, date_fin_publication = 2019-05-31, heure_fin_publication = 18-29-05, type_diapo = 56, type1 = type1 , valeur1 = valeur1 , type2 = type2 , valeur2 = valeur2 , type3 = type3 , valeur3 = valeur3 , type4 = type4 , valeur4 = valeur4 WHERE id = 123'
et toujours la même erreur je me rend donc sur phpmyadmin et déjà premier point positif il n'a plus de texte souligner en rouge. :)
Cependant en simulant la requête sql il me retourne
#1054 - Champ 'Nom' inconnu dans where clause
et il me retourne
#1054 - Champ 'Nom' inconnu dans field list
Merci encore pour ton aide :)

Re: Fatal error: Uncaught PDOException: SQLSTATE[42000]

Posté : 31 mai 2019, 18:40
par Saian
Oui comme je te disais dans mon edit du message précédent : oui et aussi tout ce qui n'est pas numérique se met entre apostrophes (qu'il faut échapper s'il y en a dans la valeur) column = 'value' :)

Re: Fatal error: Uncaught PDOException: SQLSTATE[42000]

Posté : 31 mai 2019, 19:08
par JulienOo
J'ai tous modifier comme vous me l'avez conseiller et en copiant collant cela fonctionne sur phpmyadmin. :)
Il me rester une dernière erreur coter PHP que j'ai corriger voici le code fonctionnel
$id = 123;
$_POST["nom"] = "Nom123";
$_POST["date_debut"] = date("Y-m-d");
$_POST["heure_debut"] = date("H:i:m");
$_POST["date_fin"] = date("Y-m-d");
$_POST["heure_fin"] = date("H:i:m");
$_POST["type0"] = "56";


$sql = "UPDATE _information_publier_ecrans SET
nom_publication = '".$_POST["nom"]."',
date_debut_publication = '".$_POST["date_debut"]."',
heure_debut_publication = '".$_POST["heure_debut"]."',
date_fin_publication = '".$_POST["date_fin"]."',
heure_fin_publication = '".$_POST["heure_fin"]."',
type_diapo = '".$_POST["type0"]."', ";


$compteur = 1;

for ($i=0; $i < 5; $i++)
{
 $informations["type".$i.""] = "type".$i."" ;
 $informations["valeur".$i.""] = "valeur".$i."" ;
}

while ($compteur < 5)
{
  if ($compteur == 1 )
  {
    $sql =$sql."type".$compteur." = '".$informations["type".$compteur.""]."' ,
    valeur".$compteur." = '".$informations["valeur".$compteur.""]."'";
  }
  else
  {
    $sql =$sql." , type".$compteur." = 'type".$compteur."',
    valeur".$compteur." = '".$informations["valeur".$compteur.""]."'";
  }
  $compteur++;
}

echo $sql = $sql." WHERE id = '".$id."'";
echo "<br />";
echo "<br />";
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$reponse = $bdd->query($sql);
Franchement merci beaucoup pour ton aide, tu as pus me faire gagner un temps précieux :)