GNT sans publicité, site mobile, fonctionnalitées exclusives...

PDO et erreur

Le
unbewusst.sein
je simule volontairement une erreur en appellant une base de donnée qui
n'existe pas en tant que fichier.
un fichier de base de donnée vide est créé, normal.
Mais ensuite j'envoie une requête sur cette base vide :
$res=$db->query('SELECT ROWID, * FROM categories');
try{
while($row=$res->fetch()){
print_r($row);
echo "<br />";
}
}catch (PDOException $e){
echo 'Connection failed: ' . $e->getMessage();
}

Et, bien sûr, j'ai une erreur :
Fatal error: Call to a member function fetch() on a non-object in
/Users/yt/Sites/landp/landp-pdo-test.php on line 6
malgré le try / catch qui entoure la ligne fautive :
while($row=$res->fetch()){

D'où, ma question, comment gérer l'erreur dans ce cas ?

--
« Dites nous ce dont vous avez besoin ,
on vous expliquera comment vous en passer ! »
(Coluche)
Lire les 15 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #23951291
Bonjour,

Le 10/11/2011 10:25, Une Bévue a écrit :

$res=$db->query('SELECT ROWID, * FROM categories');
try{
while($row=$res->fetch()){



Tu n'as pas testé le code de retour de query, avant de l'utiliser
comme si c'était un PDOStatement. C'est mal.©

D'où, ma question, comment gérer l'erreur dans ce cas ?



Il suffit de tester les codes d'erreur prévus et signalés dans la doc.

Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.

Cordialement,
--
Olivier Miakinen
SAM
Le #23951401
Le 10/11/11 10:25, Une Bévue a écrit :
je simule volontairement une erreur en appellant une base de donnée qui
n'existe pas en tant que fichier.
un fichier de base de donnée vide est créé, normal.
Mais ensuite j'envoie une requête sur cette base vide :
$res=$db->query('SELECT ROWID, * FROM categories');
try{
while($row=$res->fetch()){
print_r($row);
echo "<br />";
}
}catch (PDOException $e){
echo 'Connection failed: ' . $e->getMessage();
}

Et, bien sûr, j'ai une erreur :
Fatal error: Call to a member function fetch() on a non-object in
/Users/yt/Sites/landp/landp-pdo-test.php on line 6
malgré le try / catch qui entoure la ligne fautive :
while($row=$res->fetch()){

D'où, ma question, comment gérer l'erreur dans ce cas ?




Je ne connais rien au PHP et encore moins pour ses appels à BdD,

if($res=$db->query('SELECT ROWID, * FROM categories'))
try{

non ?

ou bien (en glissant sur l'erreur) :

if(@$res=$db->query('SELECT ROWID, * FROM categories'))
try{


sinon

peut-être

$res=$db->query('SELECT ROWID, * FROM categories');
try{
while(@$row=$res->fetch()){

ou ?
$res=$db->query('SELECT ROWID, * FROM categories');
try{
while($row=$res->@fetch()){

???


Qu'en disent-ils sur le NG du PHP ?

--
Stéphane Moriaux avec/with iMac-intel
Olivier Miakinen
Le #23951381
Le 10/11/2011 11:54, je répondais à Une Bévue :

Tu n'as pas testé le code de retour de query, avant de l'utiliser
comme si c'était un PDOStatement. C'est mal.©



Par ailleurs, tu as fait un crosspost avec suivi dans fr.comp.lang.php
sans signaler le suivi, ce qui a trompé SAM qui croyait répondre dans
fciwa. Ce n'est pas très bien non plus... ;-)

[suivi nulle part, c'était juste pour prévenir les lecteurs de fciwa
que les réponses sont sur fclp]
Une Bévue
Le #23951631
On 10/11/2011 11:54, Olivier Miakinen wrote:
Tu n'as pas testé le code de retour de query, avant de l'utiliser
comme si c'était un PDOStatement. C'est mal.©

> D'où, ma question, comment gérer l'erreur dans ce cas ?


Il suffit de tester les codes d'erreur prévus et signalés dans la doc.

Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.



Ah OK, suis-je bête, merci beauc
oup, je vais lire cette littérature...

Mon but est de rendre compatible mon appli entre le php de free qui
n'utilise que PDO et le php sur Mac OS X où je peux utiliser SQLite3
directement.

MAIS, d'après ce que j'ai lu sur un manuel php, les prochaines versions
d'icelui ne permettront la manipulation d'une base qu'à travers PDO, la
gestion directe ne sera plus supportée...

c'est bien vrai ???
SAM
Le #23951751
Le 10/11/11 12:59, Olivier Miakinen a écrit :

Par ailleurs, tu as fait un crosspost avec suivi dans fr.comp.lang.php
sans signaler le suivi, ce qui a trompé SAM qui croyait répondre dans
fciwa.



Ha! Oui! La honte !
Que vont-ils en penser là-bas ?

[suivi nulle part, c'était juste pour prévenir les lecteurs de fciwa
que les réponses sont sur fclp]



Vu!
Personne n'y a encore tenté de corriger mes fantaisies.

--
Stéphane Moriaux avec/with iMac-intel
Publicité
Suivre les réponses
Poster une réponse
Anonyme