Notice: Array to string conversion in

Petit nouveau ! | 3 Messages

13 oct. 2016, 15:52

Bonjour !

J'ai cette erreur là et je ne sais pas d'où elle vient , c'est vraiment bizarre car juste dans la fonction d'avant , je fais pareil mais ça ne le fait pourtant pas :

Code : Tout sélectionner

public function getData($idTournoi) { $dataTable = []; $bdd = new PDO('mysql:host=localhost;dbname=bdd','root','',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); $requete = $bdd -> prepare ('SELECT joueur.id_joueur, joueur.prenom_joueur FROM joueur ,joue WHERE joue.id_joueur=joueur.id_joueur AND joue.id_tournoi='.$idTournoi.''); $requete -> execute(); while($resultat = $requete -> fetch()) { array_push($dataTable, $resultat); } return $dataTable; }
la ligne concernée est la 4iéme ! j'ai cherché partout et j'ai tout essayé , rien :(

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

13 oct. 2016, 16:03

salut,

$idTournoi est un tableau ?
pour le savoir ajoute un var_dump($idTournoi); en début de méthode.

pour info tu peux avantageusement remplacer
while($resultat = $requete -> fetch()) {
array_push($dataTable, $resultat);
}

par $dataTable = $requete -> fetchAll()

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

13 oct. 2016, 17:25

Bonjour ! merci pour ta réponse.

Oui , idTournoi est bien un tableau !

Petit nouveau ! | 3 Messages

13 oct. 2016, 17:45

ah ben enfait mon problème remonte à plus haut car quand je fais des var_dump sur la fonction qui est supposé renvoyer idtournoi , le tableau est vide...

Code : Tout sélectionner

public function getidTournoi($Nomtournoi) { $dataTable= []; var_dump($Nomtournoi); $bdd = new PDO('mysql:host=localhost;dbname=bdd','root','',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); $requete = $bdd -> prepare ('SELECT id_tournoi FROM tournoi WHERE tournoi.Nom_tournoi='.$Nomtournoi.''); $requete -> execute(); $dataTable = $requete -> fetchAll(); var_dump($dataTable); return $dataTable; } public function getData($idTournoi) { $dataTable = []; $bdd = new PDO('mysql:host=localhost;dbname=bdd','root','',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); $requete = $bdd -> prepare ('SELECT joueur.id_joueur, joueur.prenom_joueur FROM joueur ,joue WHERE joue.id_joueur=joueur.id_joueur AND joue.id_tournoi='.$idTournoi.''); $requete -> execute(); $dataTable = $requete -> fetchAll(); return $dataTable; }

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

14 oct. 2016, 09:29

alors le problème vient du fait que getidTournoi ne doit pas retourner un tableau mais une seule donnée et que getData ne doit pas prendre en paramètre un tableau.
public function getidTournoi($Nomtournoi) {
         $bdd = new PDO('mysql:host=localhost;dbname=bdd','root','',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));         
         $requete = $bdd -> prepare ('SELECT id_tournoi FROM tournoi WHERE tournoi.Nom_tournoi='.$Nomtournoi.'');
         $requete -> execute();
         $data= $requete -> fetch();
         if($data !== false){
            return $data['id_tournoi']; // en supposant fetch_assoc
         }else {
// traitement de l'erreur (throw exception ?) tu as l'erreur possible avec la méthode [url=http://php.net/manual/fr/pdostatement.errorinfo.php]errorInfo()[/url]
        }
      }
aller au passage on utilise du SQL un poil plus normé (et récent c'est sql 99, pour 1999 :-) ) en utilisant le clef join ;)
<?php
public function getData($idTournoi)
    {
        $bdd = new PDO('mysql:host=localhost;dbname=bdd', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
        $sql = <<<sql
        SELECT id_joueur, prenom_joueur FROM joueur
        join joue using(id_joueur)
        WHERE joue.id_tournoi=:idtournoi
sql;
        $requete = $bdd -> prepare($sql);
        // si l'id est bien un entier sinon change le type ou enlève le 3ème paramètre si c'est une chaine de caractères
        $requete->bindParam(':idtournoi', $idTournoi, PDO::PARAM_INT);
        $requete -> execute();
        $dataTable = $requete -> fetchAll();
        // bonne pratique
        $requete->closeCursor();
        return $dataTable;
    }
Pense que tu peux ne faire qu'une seule connexion et passer l'objet "PDO" aux classe qui en ont besoin (au pire fait un singleton). Le but c'est ne pas à avoir à chercher cette connexion partout dans le code pour changer les info d'accès (donc évite les emmerde) et tu va aussi éviter de créer plein de connexion concurente et te faire bouler par le sgbd parce que tu ne pas en ouvrir une infinité.


@+
Il en faut peu pour être heureux ......