Bonjour Je rencontre un problème avec mon code actuellement.
Et si y'a quelqu'un qui peut m'aider, sa me ferait vraiment plaisir .

Le problème est le suivant :
Je veux modifier mes données qui se trouve dans la base de données.
Donc j'ai créer une page de code mais j'ai une erreur de PDO :: query (): SQLSTATE [HY000]: qui s'affiche.
j'arrive pas à voir l'erreur...
Et merci à l'avance

Ce que je fais

PAGE(modificateur.php)
Cela est mon code quand j'aterris sur la page pour procéder à la modification de mes données.

<?php

// SCRIPT DE CONNEXION

$hote ="localhost";
$nombasededonnees ="comptable";
$utilisateur ="comptable";
$motdepasse ="NPYyYc4kngx5gRJ6";
$charset ="utf8mb4";

$sourcedeconnection ="mysql:host=$hote;dbname=$nombasededonnees;charset=$charset";

try{
$pdo = new PDO($sourcedeconnection, $utilisateur, $motdepasse);
    echo "";
    }
catch(PDOException $erreur){
    throw new PDOException($erreur->getMessage(), (int)$erreur->getCode());
}

$resultat = $pdo->query("SELECT * FROM messagerie WHERE message='" . $_GET["message"] . "'", $sourcedeconnection);

if($resultat){
    echo "<h1>Utilisateur</h1>\n";
    $affiche = mysql_fetch_array($resultat);

    echo"<from action='history.php'method='POST'>";

    echo"<table border='1'>\n";

    echo"<tr>\n";

    echo"<td><strong>Prenom</strong></td>\n";

    echo"<td><input type='text'name='nom' value='" . $affiche["nom"] ."'/></td>\n";

     echo"</tr>\n";

     echo"<tr>\n";
     echo"<td><input type='text' name='prenom' value='" . $affiche["prenom"] ."'/></td>\n";
     echo"</tr>\n";

      echo"<tr>\n";
      echo"<td><input type='text' name='message' value='" . $affiche["message"] ."'/></td>\n";
      echo"</tr>\n";

      echo"</table>\n";

}

?>

PAGE(index.php)
Cela est mon code qui me permettra de me rendre à la page de la procédure de modification de mes données.
( ce qui veut dire, une connexion à la base de donnée, l'affichage des données, le lien qui permettra de se rendre à la base de donnée...


<?php

// SCRIPT DE CONNEXION

$hote ="localhost";
$nombasededonnees ="comptable";
$utilisateur ="comptable";
$motdepasse ="NPYyYc4kngx5gRJ6";
$charset ="utf8mb4";

$sourcedeconnection ="mysql:host=$hote;dbname=$nombasededonnees;charset=$charset";

try{
$pdo = new PDO($sourcedeconnection, $utilisateur, $motdepasse);
    echo "";
    }
catch(PDOException $erreur){
    throw new PDOException($erreur->getMessage(), (int)$erreur->getCode());
}

 // Requete relier a la page modificateur.php qui permet de modifier les donner arriver sur cette page ci.  

if(isset($_POST["modifier"])){
    $requete = $pdo->exec("UPDATE messagerie SET message" . $_POST['message']);
$resultat = $pdo->query($requete,$sourcedeconnection);
if(!$resultat){
    echo"erreur dans lexecution de la requete </br>";
     echo"le message derreur est : " . my_error($sourcedeconnection);
}
  }

// AFFICHAGE DES DONNEES DANS UN TABLEAU

$resultat = $pdo->query('SELECT * FROM messagerie ORDER BY id');

  echo'<table border> 
         <tr>
             <th>ID</th>
             <th>NOM</th>
             <th>PRENOM</th>
             <th>MESSAGE</th>
             <th>DATE
             <a href="">ordre croissant</a>
             <a href="">ordre decroissant</a>
             </th>
             <th>HEURE</th>
             <th></th>
          </tr>';

while($affiche = $resultat->fetch()){

    echo"<tr>\n";
         echo "<td>".$affiche['id']."</td>\n";
          echo "<td>".$affiche['nom']."</td>\n";
          echo "<td>".$affiche['prenom']."</td>\n";
          echo "<td>".$affiche['message']."</td>\n";
          echo "<td>".$affiche['date']."</td>\n";
          echo "<td>".$affiche['heure']."</td>\n";
          echo "<td><a href='modificateur.php?message=" . $affiche["message"]." '>Modifier</a></td>\n";

        echo"</tr>\n";
}
echo "</table>\n";
?>

Ce que j'obtiens

Attention: PDO :: query (): SQLSTATE [HY000]: Erreur générale: le mode doit être un entier dans C: \ wamp \ www \ TP1 \ modificateur.php à la ligne 27 Cela s'affiche que pour la page (modificateur.php)

7 réponses


Hello,
de ce que je vois il n'y a pas les quotes sur tes variables dans ton instanciation de ta BDD
Essaie ça


$pdo = new PDO('$sourcedeconnection', '$utilisateur', '$motdepasse');

Je sais pas si ça peux résoudre ton problème, mais t'utilise une fonction mysql mysql_fetch_array($valeur) au lieu de $reponse = $requete->fetchAll()

Bonjour,
L'erreur complète est ?
Je t'invite à apprendre l'utilisation des requêtes préparées car ça va sécurité tes réquêtes et éviter les injections SQL ensuite si tu as la moindre ' ou " dans une variable, ce l'échappera et évitera de faire planter la requête

Salut,

$resultat = $pdo->query($requete,$sourcedeconnection);

Le deuxième paramètre de la méthode query n'attend pas ta connection string, mais un entier représentant le mode de "fetch"
d'où l'erreur qui t'es retournée.

https://www.php.net/manual/fr/pdo.query.php

j'ajouterai qu'il manquerait un "=" a la requête de modification que tu passes

requete = $pdo->exec("UPDATE messagerie SET message = " . $_POST['message']);

+1 pour les requêtes préparées : https://www.php.net/manual/fr/pdo.prepared-statements.php

mariama
Auteur

Cela ne fonctionne pas !

Mais JeepayJipex !
Quand vous dites :
Le deuxième paramètre de la méthode query n'attend pas ta connection string, mais un entier représentant le mode de "fetch"
d'où l'erreur qui t'es retournée...

Vous voulez dire quoi pas là ?

Merci pour vos réponse !

Il parle de cette instruction $resultat = $pdo->query($requete,$sourcedeconnection), tu ne dois pas mettre de second paramètres, supprime le, de base le second paramètre c'est fetch style, mais t'en a pas besoin dans ce cas, donc t'as juste a supprimer $sourcedeconnection de ta requete.
source: https://www.php.net/manual/fr/pdo.query.php

mariama
Auteur

Ah d'accord je vois.
Merci pour le lien
Je ne l'avais pas lu auparavant
Je vais essayer cela pour voir !