Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/06/2011, 18h23   #1
Invité régulier
 
Inscription : mai 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 33
Points : 8
Points : 8
Par défaut erreur PDO avec fetch() mysql avec netbeans

bonjour,

Je suis en train de suivre un tutoriel pour voir le fonctionnement de PDO et, des le début, j'ai deux petit soucis que je n'arrive pas à comprendre

Citation:

Use of undefined constant PDO_ERRMODE_WARNING - assumed 'PDO_ERRMODE_WARNING' in C:\wamp\www\SitePoo\modele\bdo.php on line 10

Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\SitePoo\modele\bdo.php on line 17
voila mon code :

Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$dsn = 'mysql:host=localhost; dbname = testpoo';
$username = 'root';
$passwd = '';
 
 
 
try {
    $BD = new PDO($dsn, $username, $passwd);
    $BD->setAttribute(PDO::ATTR_ERRMODE,PDO_ERRMODE_WARNING);//TODO changer warning en EXCEPTION
} catch (PDOException $exc) {
    echo 'Problème de connection à la base de donnée veuillez réessayer plutard !';
}
 
$sql = "SELECT * FROM user";
$req = $BD->query($sql);
while ($d = $req->fetch(PDO::FETCH_OBJ)){
    echo '<pre>';
    print_r($d);
    echo '</pre>';
}
?>

Au début, j'avais fait une erreur car je m'étais trompé avec le nom de la base de données. Mais après avoir rectifier le tir, j'ai toujours le même problème.
Ma base de données n'est pas vide et fonctionne, je l'ai testé avant de commencer le tutoriel.

merci d'avance !
soohikei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 19h07   #2
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
Je t'invite à vérifier que la table "user" existe dans ton schéma de base de données.

Ce message d'erreur apparaît quand on manipule ce qu'on croit être un recordset. En fait, l'objet $req n'a pas dû être initialisé suite à l'exécution de la requête SELECT * FROM user.
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 19h11   #3
Invité régulier
 
Inscription : mai 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 33
Points : 8
Points : 8
je viens de verifier il existe bien je vais recréer la table et essayer de nouveau
soohikei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 19h31   #4
Invité régulier
 
Inscription : mai 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 33
Points : 8
Points : 8
Bon, j'ai créé une autre base de données, nom 'tuto', et une seule table dedans : 'user', avec 4 champs : 'id', 'nom', 'prenom', 'mail'.

et toujours les mêmes erreurs ..
soohikei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 21h48   #5
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
Que donne var_dump($req) ?
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 21h52   #6
Invité régulier
 
Inscription : mai 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 33
Points : 8
Points : 8
Ça me retourne false ...
soohikei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 21h55   #7
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
En essayant de changer ta requête SQL :

Code :
1
2
3
 
SHOW TABLES ;
SELECT id FROM user ;
Qu'est-ce que cela donne ?
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 22h00   #8
Invité régulier
 
Inscription : mai 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 33
Points : 8
Points : 8
toujours pareil
soohikei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 22h02   #9
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
Et var_dump($DB) ?

Je vais finir par croire qu'il ne s'est pas connecté à la base ce petit PDO...
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 22h05   #10
Invité régulier
 
Inscription : mai 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 33
Points : 8
Points : 8
voila ce que ca me donne :
soohikei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 22h12   #11
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
En vrac...

1°) As-tu bien mis les ";" à la fin ?

2°) Que donne var_dump($DB->errorCode()); ?

3°) Que donne var_dump($DB->errorInfo()); ?

4°) Que se passe-t-il si tu enlèves la ligne BD->setAttribute(... ?

Je n'ai pas l'habitude d'utiliser PDO, mais non d'une exception, on va bien arriver à trouver l'origine du problème !!!
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 22h28   #12
Invité régulier
 
Inscription : mai 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 33
Points : 8
Points : 8
ca c'est ma BD et ma table (au cas ou ...)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 
CREATE DATABASE 'tuto';
 
CREATE TABLE `tuto`.`user` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nom` VARCHAR( 20 ) NOT NULL ,
`prenom` VARCHAR( 20 ) NOT NULL ,
`mail` VARCHAR( 50 ) NOT NULL
) ENGINE = InnoDB;
 
INSERT INTO `tuto`.`user` (
`id` ,
`nom` ,
`prenom` ,
`mail`
)
VALUES (
'1', 'nom', 'prenom', 'nom@prenom.com'
);
1) les ';' y sont bien.
2) var_dump($DB->errorCode()); me retourne null
3)($DB->errorInfo()); me retourne :
Code :
1
2
3
4
array
  0 => string '' (length=0)
  1 => NULL
  2 => NULL
4) la ligne BD->setAttribute me retire l'erreur :
Code :
USE of undefined constant PDO_ERRMODE_WARNING - assumed 'PDO_ERRMODE_WARNING' IN C:\wamp\www\SitePoo\modele\bdo.php ON line 10
en tous les cas merci de prendre le temp de m'aider parce que ca commence a me fatiguer
soohikei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 13h21   #13
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
Je crois que deux neurones viennent de se toucher de mon côté !

Remplace
Code :
1
2
 
PDO_ERRMODE_WARNING
par
Code :
1
2
 
PDO::ERRMODE_WARNING
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 15h16   #14
Invité régulier
 
Inscription : mai 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 33
Points : 8
Points : 8
je remets le code avec les changements :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
try {
    $DB = new PDO('mysql:host=localhost; dbname = tuto', 'root', '');
    $DB->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);//TODO changer warning en EXCEPTION
    echo '1',var_dump($DB->errorInfo());
    echo '2',var_dump($DB->errorCode());
    echo '3',var_dump($DB);
} catch (PDOException $exc) {
    echo 'Problème de connection à la base de donnée veuillez réessayer plutard !';
}
 
$sql = "SELECT nom,prenom FROM user";
try {
    $req = $DB->query($sql);
    while ($d = $req->fetch(PDO::FETCH_OBJ)) {
        echo '<pre>';
        print_r($d);
        echo '<pre>';
    }
} catch (PDOException $exc) {
    echo 'requete planter';
}
?>

C'est fait, ça me remplace l'erreur
Code :
1
2
 
USE of undefined constant PDO_ERRMODE_WARNING - assumed 'PDO_ERRMODE_WARNING' IN C:\wamp\www\SitePoo\modele\bdo.php ON line 4
Par

Code :
1
2
 
Warning: PDO::query() [pdo.query]: SQLSTATE[3D000]: Invalid catalog name: 1046 No DATABASE selected IN C:\wamp\www\pdo\pdo.php ON line 14
Bon, je viens de rentrer chez moi. Je vais continuer à chercher de mon côté. Apparemment, j'ai un soucis avec la base de données , je te tiens au jus s'il y a du nouveau entre temps.
soohikei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 15h56   #15
Invité régulier
 
Inscription : mai 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 33
Points : 8
Points : 8
C'est bon. Après un jour et des poussières, tout est rentré dans l'ordre. Voila mon erreur (très très bête) ...

j'ai mis des espaces là où il ne fallait pas :

Code php :
$DB = new PDO('mysql:host = localhost; dbname = tuto', 'root', '');

... voilà au lieu de

Code php :
$DB = new PDO('mysql:host = localhost;dbname=tuto', 'root', '');

bref

Je te remercie pour le temps passé à m'aider
soohikei est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h02.


 
 
 
 
Partenaires

Hébergement Web