PHP MySql PDO requête tout simple qui ne marche pas!

Résolu/Fermé
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024 - 6 mars 2023 à 15:23
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024 - 7 mars 2023 à 19:55

Bonjour,

En complément du problème récemment posé (résolu, merci) j'ai un souci similaire:

<code php>
$requete = $connexion->prepare("SELECT Rk_Table FROM taxabase1");
        $requete->execute();
        $result = $requete->fetchColumn();
        echo '<p>Rank number&nbsp;: <b>!!' . $result[0] . '!!!</b></p>';
</code>

le résultat me donne 4 toujours quel que soit le lien sur lequel j'ai cliqué avant (il faudrait un nombre différent selon le clic, selon le nombre en rapport dans la colonne Rk_Table)

alors qu'ensuite dans la même boucle j'ai une autre requête qui marche (en rapport avec mon clic) et les 2 requêtes se suivent!
        
<code php>
$requete->bindParam(':id', $_GET["Rk_Hist"], PDO::PARAM_INT);
        $requete->execute();
        $result = $requete->fetchAll();

        echo '<p>Reversed name (cf. legends and abbreviations in <a href="aa-header-frametaxon.php">MODEL</a>): <b>!!' . $result[0]["Reversed_name"] . '!!!</b></p>';
</code>

etc.

J'ai essayé (comme pour la 2ème requête) avec 

<code php>
$requete = $connexion->prepare("SELECT Rk_Table FROM taxabase1");
        $requete->execute();
        $result = $requete->fetchAll();
        echo '<p>Rank number&nbsp;: <b>!!' . $result[0] . '!!!</b></p>';
</code>

mais alors j'ai une erreur:

Notice: Array to string conversion in D:\wamp64\xxx.php on line 131 qui est:


<code php>
echo '<p>Rank number&nbsp;: <b>!!' . $result[0] . '!!!</b></p>';
</code>

j'ai bien regardé la doc php mais je ne trouve pas... une soluce?

Merci
A+, cordialement,

JH


Windows / Opera 95.0.0.0

A voir également:

5 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
6 mars 2023 à 15:35

Bonjour,

Déjà, pour poster du code sur le forum, il ne faut plus utiliser les balises de code  <code php> ... </code> .. mais l'icone prévue à cet effet lors de la rédaction de ton message

Ensuite :

Avant de dire que le souci vient de PDO ...  as tu testé ta requête DIRECTEMENT dans ta BDD ( via phpmyadmin par exemple ) ? Le résultat obtenu est-il conforme à tes attentes ?? (je ne suis pas sûr !!! )

Je pense que tu as légèrement oublié de : 

Soit mettre un WHERE à ta requête

Soit .. de boucler sur le résultat de celle-ci ..

Et au passage, pour ce qui concerne les erreurs PDO .. (et éviter d'en avoir... ) je t'invite à appliquer le contenu de ce lien : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs


0
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024
6 mars 2023 à 16:26

Bonjour Jordane,

Désolé pour la non-actualisation de votre système de code... je suis âgé et je pose des questions très rarement sur le forum.

Il y a mis-compréhension, sauf erreur.

C'est un problème php comme indiqué dans l'erreur ligne 131.

J'ai bien testé sur wampserver. Je ne crois pas qu'il y ait un souci de requête.

Quand j'utilise fetchcolumn, comme vous l'aviez suggéré sur un message précédent et différent j'ai un résultat constant '4'

Avec fetchall, j'ai une erreur alors que la requête qui suit avec fetchall fonctionne bien (depuis toujours).

Merci

Cdlt, JH

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
6 mars 2023 à 17:21

Tu retournes le premier résultat de ta requête.

Il n'y a pas de raison que ça te retourne une valeur différente d'une fois sur l'autre....

C'est bien pour ça que je t'ai indiqué que tu avais certainement oublié un where...

Fais-nous une capture du résultat dans PHP myamine et indique nous dans cette image quelle valeur tu souhaites récupérer

0
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024
6 mars 2023 à 17:55

Bonjour Jordane,

Dans phpmyadmin, je fais la requête:
SELECT Rk_Table FROM taxabase1

Cà marche.

Ci-dessous la jpg capture d'écran.

Est-ce que cela t'aide?

Dans localhost j'obtiens toujours '4', par exemple si je clique sur le lien correspondant à la ligne 44 le premier nombre sur le tableau en jpg le résultat me retourne encore '4', et pareil si je clique sur le lien correspondant à la ligne 800 le deuxième dans le même tableau (et bien sûr comme c'est des lignes différentes, je dois avoir des nombres tous différents).

J'espère que j'ai bien répondu à ta demande!

Cdlt, JH

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
6 mars 2023 à 21:23

Tu vois bien que ta requête retourne TOUT le contenu de ta table ... et pas UNE ligne dépendant de son ID ...

Comme je te le dit .. il manque, à minima, une clause WHERE dans ta requête ...

Maintenant, pourquoi le "4"

Donc, actuellement, ta requête retourne TOUTES les lignes de ta table.

Ton code PHP, utilisant le FETCHCOLUMN , tu récupères TOUTES les valeurs retournées par ta requête sous forme d'array.

Idem avec le FETCHALL ...

Suffit de faire un var_dump de ta variable $result pour voir ce qu'elle contient :

$requete = $connexion->prepare("SELECT Rk_Table FROM taxabase1");
$requete->execute();
$result = $requete->fetchColumn();
var_dump($result );

Maintenant, corrigeons ton code pour ne récupérer qu'une seule ligne dans ta requête en fonction du lien cliqué :

//On récupère PROPREMENT les variables AVANT de les utiliser :
$id = !empty($_GET["Rk_Hist"]) ? $_GET["Rk_Hist"] : null;

$sql = "SELECT Rk_Table 
       FROM taxabase1
       WHERE id =:id ";
       
try{
  $requete = $connexion->prepare($sql);
  $requete->bindParam(':id', $id, PDO::PARAM_INT);
  $requete->execute();
  $result = $requete->fetchColumn();
  var_dump($result );
   echo '<p>Rank number&nbsp;: <b>!!' . $result . '!!!</b></p>';
}catch(Exception $e){
  echo "Erreur SQL : " . $e->getMessage();
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024
7 mars 2023 à 19:55

Ah, merci Jordane, clair et pédagogique.

J'ai adapté et cela a marché!

Je ne sais pas pourquoi je faisais une fixette sur le fetchColumn de ma question précédente

Je marque résolu!

Bonne continuation

Cdlt, JH

0