Erreur fetchAll() on a non-objet
Fermé
Dalbator
Messages postés
51
Date d'inscription
mardi 9 juillet 2013
Statut
Membre
Dernière intervention
3 juin 2017
-
17 oct. 2016 à 18:35
Dalbator Messages postés 51 Date d'inscription mardi 9 juillet 2013 Statut Membre Dernière intervention 3 juin 2017 - 19 oct. 2016 à 12:56
Dalbator Messages postés 51 Date d'inscription mardi 9 juillet 2013 Statut Membre Dernière intervention 3 juin 2017 - 19 oct. 2016 à 12:56
A voir également:
- Erreur fetchAll() on a non-objet
- Erreur 0x80070643 - Accueil - Windows
- Vente objet occasion entre particulier - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 38 free ✓ - Forum Mobile
2 réponses
jordane45
Messages postés
38304
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 novembre 2024
4 705
Modifié par jordane45 le 17/10/2016 à 19:39
Modifié par jordane45 le 17/10/2016 à 19:39
Bonjour,
Active la gestion des erreurs PDO et places ta requête dans un bloc TRY/CATCH.... ça devrait te dire ce qui ne va pas.
Regarde ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Cordialement,
Jordane
Active la gestion des erreurs PDO et places ta requête dans un bloc TRY/CATCH.... ça devrait te dire ce qui ne va pas.
Regarde ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Cordialement,
Jordane
jordane45
Messages postés
38304
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 novembre 2024
4 705
19 oct. 2016 à 11:48
19 oct. 2016 à 11:48
Je viens de voir ...
Tu utilises, pour faire un UPDATE la fonction executeQuery .... qui fait un FETCH (ou un fetchALL) ....
Normal que ça te retourne une erreur.
Créés donc une seconde fonction
Une pour faire des SELECT
une pour faire des UPDATE ou DELETE
Perso (j'en ai 3) :
j'ai une fonction querySELECT pour faire les select (et les fetch), une pour faire les UPDATE / DELETE que j'ai nommé queryExec
et une pour les INSERT que j'ai nommé queryInsert
Voila à quoi pourrait ressembler ta class de connexion à la BDD
Dans la class qui gère tes users.. il te suffit ensuite d'en faire un Extend pour pouvoir l'utiliser.
Par exemple :
NB: Si tu n'as pas d'AutoLoad pour tes class .. pense à inclure les deux class :
Puis pour l'utiliser dans ton code :
Tu utilises, pour faire un UPDATE la fonction executeQuery .... qui fait un FETCH (ou un fetchALL) ....
Normal que ça te retourne une erreur.
Créés donc une seconde fonction
Une pour faire des SELECT
une pour faire des UPDATE ou DELETE
Perso (j'en ai 3) :
j'ai une fonction querySELECT pour faire les select (et les fetch), une pour faire les UPDATE / DELETE que j'ai nommé queryExec
et une pour les INSERT que j'ai nommé queryInsert
Voila à quoi pourrait ressembler ta class de connexion à la BDD
<?php //-------------------------------------------------------------------------// // Fichier de class : pdoFunc.class.php // pour la connexion/gestion de la BDD en PDO mysql // autheur : Jordane - Mai 2014 //-------------------------------------------------------------------------// class pdoFunc extends PDO{ //put your code here private $_obj_pdo, $_obj_pdo_prepare; public $_last_insert_id=""; public $_query = array(); // contient la requête et les datas function __construct(){ parent::__construct(); //connexion à la BDD $this->cnx(); } /** // Connnexion */ public function cnx(){ try{ $_obj_pdo = new PDO('mysql:host=localhost; dbname=mabdd; charset=utf8', 'user', 'password'); $_obj_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //activation des erreurs $_obj_pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); // type de fetch par défaut $this->_obj_pdo = $_obj_pdo; } catch(PDOException $e) { $this->_obj_pdo = null; die('Erreur : ' . $e->getMessage()); } } /---------------------------------------------------------------------------------------------------------------------------// // FONCTIONS //---------------------------------------------------------------------------------------------------------------------------// /** * Requête : SELECT * return : Array * fetchAll — > Retourne un tableau contenant toutes les lignes du jeu d'enregistrements */ public function querySelect($sql,$a_data=NULL){ $this->_query = array('SQL'=>$sql, "A_DATA"=>$a_data); try{ $this->_obj_pdo_prepare = $this->_obj_pdo->prepare($sql); $this->_obj_pdo_prepare->execute($a_data); return $this->_obj_pdo_prepare->fetchAll(); } catch(Exception $e) { echo "<pre><br>".$e->getMessage()."<br>"; print_r($this->_query); echo "</pre>"; } } /** * Requête : INSERT * return : int : ID INSERT (Numéro de l'id auto_incrémenté créé lors de l'insert) */ public function queryInsert($sql,$a_data=NULL){ $this->_query = array('SQL'=>$sql, "A_DATA"=>$a_data); try{ $this->_obj_pdo_prepare = $this->_obj_pdo->prepare($sql); $this->_obj_pdo_prepare->execute($a_data); $this->_last_insert_id = $this->_obj_pdo->lastInsertId(); return $this->_last_insert_id ; } catch(Exception $e){ echo "<pre>"; print_r($this->_query); echo "</pre>"; echo "<br>".$e->getMessage()."<br>"; } } /** * Requête : EXEC (pour les Update/Delete..) * return : True/False */ public function queryExec($sql,$a_data=NULL){ $this->_query = array('SQL'=>$sql, "A_DATA"=>$a_data); try{ $this->_obj_pdo_prepare = $this->_obj_pdo->prepare($sql); $result['RESULT'] = $this->_obj_pdo_prepare->execute($a_data); $result['NB_ROWS_AFFECTED'] = $this->_obj_pdo_prepare->rowCount(); return $result; } catch(Exception $e) { echo "<pre><br>".$e->getMessage()."<br>"; print_r($this->_query); echo "</pre>"; } } }//----------- FIN DE LA CLASS -------------------//
Dans la class qui gère tes users.. il te suffit ensuite d'en faire un Extend pour pouvoir l'utiliser.
Par exemple :
<?php //-----------------------------------------------------------------// // Fichier users.class.php // Class de gestion des users // Necessite la class pdoFunc //-----------------------------------------------------------------// class users extends pdoFunc{ private $table = "t_InfoJoueur"; function __construct(){ parent::__construct(); } public Function GetUsers(){ $result = NULL; $json = array(); $response = $this->querySelect("SELECT * FROM $this->table"); if(!empty($response)){ $json = $response[0]; $result = json_encode($json); } return $result; } public function userExist($user){ $sql = "SELECT * FROM $this->table WHERE Pseudo_ID = :user": $datas = array(":user"=>$user); $res = $this->queryExec($sql,$datas); $result = !empty($res)? true : false; return $result; } public function ban($user) { if(!$this->userExist($user)){ $result = "ERROR:USER_NOT_FOUND"; }else{ $this->queryExec("UPDATE $this->table SET Bani = 1 WHERE Pseudo_ID = ?"); $result = "OK:BANNED"; } return $result; } // Fin de la class }
NB: Si tu n'as pas d'AutoLoad pour tes class .. pense à inclure les deux class :
require_once "pdoFunc.class.php"; require_once "users.class.php";
Puis pour l'utiliser dans ton code :
$oUser = new users(); $arr_users = $oUser->GetUsers(); print_r($arr_users);
Dalbator
Messages postés
51
Date d'inscription
mardi 9 juillet 2013
Statut
Membre
Dernière intervention
3 juin 2017
19 oct. 2016 à 12:56
19 oct. 2016 à 12:56
Ok merci mais je comprend pas tout :/ je vais attendre d'apprendre le PHP en cour et commencer sur le site du zéro :).
Maintenant je vais essayer de joindre ca a mon programme en vb.net on vavoir ce que ca donne pour les fonctions qui fonctionnent même si j'ai déjà des erreur sur le json :'(
Je reviendrai vers toi si j'ai de nouvelles erreur
Maintenant je vais essayer de joindre ca a mon programme en vb.net on vavoir ce que ca donne pour les fonctions qui fonctionnent même si j'ai déjà des erreur sur le json :'(
Je reviendrai vers toi si j'ai de nouvelles erreur
17 oct. 2016 à 20:23
Mais j'ai cette erreur :
Fatal error: Call to a member function setAttribute() on a non-object in /home/u620002219/public_html/admin.php on line 35
17 oct. 2016 à 21:53
et de l'autre
Ne vois tu pas l'erreur ?
Essayes ça :
18 oct. 2016 à 19:50
18 oct. 2016 à 23:19
cette fonction est automatiquement appellée lorsque l'on instancie la class (avec le new).
Le parent:: ç'est pour faire référence à la class en Extend (ici PDO).
Modifié par didi56440 le 19/10/2016 à 10:27
Erreur dans la requête UPDATE t_InfoJoueur SET Bani = 1 WHERE Pseudo_ID = ?; SQLSTATE[HY000]: General error
args :
Array ( [0] => Dalbator ) OK:BANNED
Le code :