[RESOLU] Catchable fatal error: Object of class PDOStatement

Eléphanteau du PHP | 29 Messages

28 mars 2014, 16:08

Bonjour,
J'ai cette erreur Catchable fatal error: Object of class PDOStatement could not be converted to string
Sur ce code :
$nb_personne = $bdd->query('SELECT * FROM nb_personne');//Récupération de ton nombre via base de donnée ou fichier (cf cours m@teo21)
 
if (isset($_POST['plus'])) {

$nb_personne++;
   //On renvoi le nombre dans la base de donnée ou le fichier
  }
 else if(isset($_POST['moins'])){
   $nb_personne--;
   //On renvoi le nombre dans la base de donnée ou le fichier
}
echo $nb_personne;
   
J'ai lu que ce n'était pas un tableau de donnée mais un objet.
Bref totale incompréhension pour moi, comment pourrais-je afficher le contenu de la variable ?
Errare humanum est, lupus et agnus, geranium begonia, para bailar la bamba

ViPHP
xTG
ViPHP | 7331 Messages

28 mars 2014, 20:55

PDO::query te renvoie un objet sur lequel on peut itérer.
http://fr2.php.net/manual/en/pdo.query.php
L'exemple de la doc est assez incomplet mais montre le principe.

Le mieux serait de tester que le retour de la fonction n'est pas "false" puis de boucler dessus pour récupérer les informations.

Eléphanteau du PHP | 29 Messages

01 avr. 2014, 08:57

Oui c'est bon, c'est parce que j'avais mal utilisé ma table en gros.
Voilà mon code pour ceux qui auraient le même problème :
<?php


try
{
	// On se connecte à MySQL
	//$bdd = new PDO('mysql:host=localhost;dbname=nb_personne', 'root', '');
	$bdd = mysql_connect('localhost','root');
	mysql_select_db('nb_personne');
}
catch(Exception $e)
{
	// En cas d'erreur, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
}

//$nb_personne = $bdd->query('SELECT * FROM nb_personne');//Récupération de ton nombre via base de donnée ou fichier (cf cours m@teo21 openclassroom)
$sql='SELECT * FROM nb_personne';
 $query = mysql_query($sql);
 $nb_personne= mysql_fetch_object($query);
 //echo 'TEST:'.count($nb_personne);
 //var_dump($nb_personne);
 
if (isset($_POST['plus'])) {

$nb_personne->compteur++;
   //On renvoi le nombre dans la base de donnée ou le fichier
  }
 else if(isset($_POST['moins'])){
   $nb_personne->compteur--;
   //On renvoi le nombre dans la base de donnée ou le fichier
}
//echo $nb_personne->compteur;


$sql='UPDATE nb_personne SET compteur='.$nb_personne->compteur.' WHERE id=1';
//UPDATE  `nb_personne`.`nb_personne` SET  `compteur` =  '42' WHERE  `nb_personne`.`id` =1;
$query = mysql_query($sql);
?>
//Et pour afficher
<?php echo $nb_personne->compteur?>
Errare humanum est, lupus et agnus, geranium begonia, para bailar la bamba

ViPHP
xTG
ViPHP | 7331 Messages

01 avr. 2014, 21:00

Tu peux enlever ton try..catch car le driver mysql ne renvoie aucune exception. ;)
Et par contre il serait temps de migrer ton code vers mysqli (mêmes fonctions que mysql mais avec un i) ou bien PDO.
Car le driver mysql n'est plus maintenu et donc n'est pas exempt de failles de sécurité.