$res=$db->query('SELECT ROWID, * FROM categories');
try{
while($row=$res->fetch()){
D'où, ma question, comment gérer l'erreur dans ce cas ?
$res=$db->query('SELECT ROWID, * FROM categories');
try{
while($row=$res->fetch()){
D'où, ma question, comment gérer l'erreur dans ce cas ?
$res=$db->query('SELECT ROWID, * FROM categories');
try{
while($row=$res->fetch()){
D'où, ma question, comment gérer l'erreur dans ce cas ?
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 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 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 ?
Tu n'as pas testé le code de retour de query, avant de l'utiliser
comme si c'était un PDOStatement. C'est mal.©
Tu n'as pas testé le code de retour de query, avant de l'utiliser
comme si c'était un PDOStatement. C'est mal.©
Tu n'as pas testé le code de retour de query, avant de l'utiliser
comme si c'était un PDOStatement. C'est mal.©
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.
<cit.http://fr2.php.net/manual/fr/pdo.query.php>
Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.
</cit.>
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.
<cit.http://fr2.php.net/manual/fr/pdo.query.php>
Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.
</cit.>
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.
<cit.http://fr2.php.net/manual/fr/pdo.query.php>
Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.
</cit.>
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.
[suivi nulle part, c'était juste pour prévenir les lecteurs de fciwa
que les réponses sont sur fclp]
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.
[suivi nulle part, c'était juste pour prévenir les lecteurs de fciwa
que les réponses sont sur fclp]
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.
[suivi nulle part, c'était juste pour prévenir les lecteurs de fciwa
que les réponses sont sur fclp]
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.
<cit. http://fr2.php.net/manual/fr/pdo.query.php>" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://fr2.php.net/manual/fr/pdo.query.php>
Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.
</cit.>
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.
<cit. http://fr2.php.net/manual/fr/pdo.query.php>
Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.
</cit.>
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.
<cit. http://fr2.php.net/manual/fr/pdo.query.php>" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://fr2.php.net/manual/fr/pdo.query.php>
Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.
</cit.>
Ben, finalement, je ne comprends pas ce que tu me dis là ou je ne
comprends pas le manuel, ou pire, les deux...
Je lis :
PDO::query() exécute une requête SQL en appelant une seule fonction,
retourne le jeu de résultats (s'il y en a) retourné par la requête en
tant qu'objet PDOStatement.
à l'adresse :
<http://fr2.php.net/manual/fr/pdo.query.php>" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://fr2.php.net/manual/fr/pdo.query.php>
Ben, c'est bien une "PDOStatement" mon $res=$db->query('SELECT ROWID, *
FROM categories');
je dois dire qu'avant je faisais un :
if($res) {
while($row=$res->fetch()){
...
et que $res était tjs à 1 même quand je provoquait volontairement une
certaine erreur (pas de base en tant que fichier donc pas de table
categories à lire).
Alors que la doc dit :
Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.
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.
<cit. http://fr2.php.net/manual/fr/pdo.query.php>" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://fr2.php.net/manual/fr/pdo.query.php>
Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.
</cit.>
donc je devrais plutôt tester le code de retour de :
car je lis :
[...]
à la page :
<http://fr2.php.net/manual/fr/pdo.errorcode.php>
Donc, si j'ai bien compris, je devrais plutôt faire :
$db=new PDO("sqlite:fichier-qui-n-existe-pas.db");
// le fichier "sqlite:fichier-qui-n-existe-pas.db" est créé,
// mais il est vide de toute table
$res=$db->query('SELECT ROWID, * FROM categories');
if($res){
while($row=$res->fetch()){
print_r($row);
echo "<br />";
}
} else {
// une erreur c'est produite car $res est à false
// see <http://fr2.php.net/manual/fr/pdostatement.errorinfo.php>
echo "nPDOStatement::errorCode(): ";
print $res->errorCode();
$info=$res->errorInfo();
print_r($info);
}
C'est ça ?
En fait ce qui était faux, c'était mon :
} catch (PDOException $e){
echo 'Connection failed: ' . $e->getMessage();
}
qui n'est valable qu'au niveau de :
$db=new PDO("sqlite:fichier-qui-n-existe-pas.db");
laquelle ligne ne produit pas d'erreur...
avec SQLite, puisque s'il n'existe pas, le fichier est créé.
bon, je poste et je teste ça...
Ben, finalement, je ne comprends pas ce que tu me dis là ou je ne
comprends pas le manuel, ou pire, les deux...
Je lis :
PDO::query() exécute une requête SQL en appelant une seule fonction,
retourne le jeu de résultats (s'il y en a) retourné par la requête en
tant qu'objet PDOStatement.
à l'adresse :
<http://fr2.php.net/manual/fr/pdo.query.php>
Ben, c'est bien une "PDOStatement" mon $res=$db->query('SELECT ROWID, *
FROM categories');
je dois dire qu'avant je faisais un :
if($res) {
while($row=$res->fetch()){
...
et que $res était tjs à 1 même quand je provoquait volontairement une
certaine erreur (pas de base en tant que fichier donc pas de table
categories à lire).
Alors que la doc dit :
Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.
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.
<cit. http://fr2.php.net/manual/fr/pdo.query.php>
Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.
</cit.>
donc je devrais plutôt tester le code de retour de :
car je lis :
[...]
à la page :
<http://fr2.php.net/manual/fr/pdo.errorcode.php>
Donc, si j'ai bien compris, je devrais plutôt faire :
$db=new PDO("sqlite:fichier-qui-n-existe-pas.db");
// le fichier "sqlite:fichier-qui-n-existe-pas.db" est créé,
// mais il est vide de toute table
$res=$db->query('SELECT ROWID, * FROM categories');
if($res){
while($row=$res->fetch()){
print_r($row);
echo "<br />";
}
} else {
// une erreur c'est produite car $res est à false
// see <http://fr2.php.net/manual/fr/pdostatement.errorinfo.php>
echo "nPDOStatement::errorCode(): ";
print $res->errorCode();
$info=$res->errorInfo();
print_r($info);
}
C'est ça ?
En fait ce qui était faux, c'était mon :
} catch (PDOException $e){
echo 'Connection failed: ' . $e->getMessage();
}
qui n'est valable qu'au niveau de :
$db=new PDO("sqlite:fichier-qui-n-existe-pas.db");
laquelle ligne ne produit pas d'erreur...
avec SQLite, puisque s'il n'existe pas, le fichier est créé.
bon, je poste et je teste ça...
Ben, finalement, je ne comprends pas ce que tu me dis là ou je ne
comprends pas le manuel, ou pire, les deux...
Je lis :
PDO::query() exécute une requête SQL en appelant une seule fonction,
retourne le jeu de résultats (s'il y en a) retourné par la requête en
tant qu'objet PDOStatement.
à l'adresse :
<http://fr2.php.net/manual/fr/pdo.query.php>" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://fr2.php.net/manual/fr/pdo.query.php>
Ben, c'est bien une "PDOStatement" mon $res=$db->query('SELECT ROWID, *
FROM categories');
je dois dire qu'avant je faisais un :
if($res) {
while($row=$res->fetch()){
...
et que $res était tjs à 1 même quand je provoquait volontairement une
certaine erreur (pas de base en tant que fichier donc pas de table
categories à lire).
Alors que la doc dit :
Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.
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.
<cit. http://fr2.php.net/manual/fr/pdo.query.php>" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://fr2.php.net/manual/fr/pdo.query.php>
Valeurs de retour
PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur
survient.
</cit.>
donc je devrais plutôt tester le code de retour de :
car je lis :
[...]
à la page :
<http://fr2.php.net/manual/fr/pdo.errorcode.php>
Donc, si j'ai bien compris, je devrais plutôt faire :
$db=new PDO("sqlite:fichier-qui-n-existe-pas.db");
// le fichier "sqlite:fichier-qui-n-existe-pas.db" est créé,
// mais il est vide de toute table
$res=$db->query('SELECT ROWID, * FROM categories');
if($res){
while($row=$res->fetch()){
print_r($row);
echo "<br />";
}
} else {
// une erreur c'est produite car $res est à false
// see <http://fr2.php.net/manual/fr/pdostatement.errorinfo.php>
echo "nPDOStatement::errorCode(): ";
print $res->errorCode();
$info=$res->errorInfo();
print_r($info);
}
C'est ça ?
En fait ce qui était faux, c'était mon :
} catch (PDOException $e){
echo 'Connection failed: ' . $e->getMessage();
}
qui n'est valable qu'au niveau de :
$db=new PDO("sqlite:fichier-qui-n-existe-pas.db");
laquelle ligne ne produit pas d'erreur...
avec SQLite, puisque s'il n'existe pas, le fichier est créé.
bon, je poste et je teste ça...
D'accord, tiens-nous au courant !
D'accord, tiens-nous au courant !
D'accord, tiens-nous au courant !
Bon le code (qui marche si je ne provoque pas d'erreur volontairement) :
[...]
if($res){
while($row=$res->fetch()){
print_r($row);
echo "<br />";
}
}else{
echo "nPDOStatement::errorCode(): ";
print $res->errorCode();
[...]
- 1 - je n'ai jamais de "PDOException" même si le fichier
"../landp.db" n'esxiste pas;
- 2 - si je provoque une erreur en mettant :
$db=new PDO("sqlite:../landp-fichier-inexistant.db");
J'ai le résultat :
PDOStatement::errorCode():
Fatal error: Call to a member function errorCode() on a non-object in
/home/mfj/Sites/landp/php/pdo_cat_test.php on line 33
ce qui est plutôt bidonnant...
notes bien que je n'ai jamais fait de test sur $db puisque dans un try /
catch.
Bon le code (qui marche si je ne provoque pas d'erreur volontairement) :
[...]
if($res){
while($row=$res->fetch()){
print_r($row);
echo "<br />";
}
}else{
echo "nPDOStatement::errorCode(): ";
print $res->errorCode();
[...]
- 1 - je n'ai jamais de "PDOException" même si le fichier
"../landp.db" n'esxiste pas;
- 2 - si je provoque une erreur en mettant :
$db=new PDO("sqlite:../landp-fichier-inexistant.db");
J'ai le résultat :
PDOStatement::errorCode():
Fatal error: Call to a member function errorCode() on a non-object in
/home/mfj/Sites/landp/php/pdo_cat_test.php on line 33
ce qui est plutôt bidonnant...
notes bien que je n'ai jamais fait de test sur $db puisque dans un try /
catch.
Bon le code (qui marche si je ne provoque pas d'erreur volontairement) :
[...]
if($res){
while($row=$res->fetch()){
print_r($row);
echo "<br />";
}
}else{
echo "nPDOStatement::errorCode(): ";
print $res->errorCode();
[...]
- 1 - je n'ai jamais de "PDOException" même si le fichier
"../landp.db" n'esxiste pas;
- 2 - si je provoque une erreur en mettant :
$db=new PDO("sqlite:../landp-fichier-inexistant.db");
J'ai le résultat :
PDOStatement::errorCode():
Fatal error: Call to a member function errorCode() on a non-object in
/home/mfj/Sites/landp/php/pdo_cat_test.php on line 33
ce qui est plutôt bidonnant...
notes bien que je n'ai jamais fait de test sur $db puisque dans un try /
catch.
ce qui est plutôt logique !
Enfin, réfléchis : tu ne peux pas appeler $res->fetch() parce que $res
n'est pas un PDOStatement (il vaut FALSE) ; comment dans ce cas peux-tu
imaginer pouvoir appeler $res->errorCode() ? FALSE->errorCode() ???
ce qui est plutôt logique !
Enfin, réfléchis : tu ne peux pas appeler $res->fetch() parce que $res
n'est pas un PDOStatement (il vaut FALSE) ; comment dans ce cas peux-tu
imaginer pouvoir appeler $res->errorCode() ? FALSE->errorCode() ???
ce qui est plutôt logique !
Enfin, réfléchis : tu ne peux pas appeler $res->fetch() parce que $res
n'est pas un PDOStatement (il vaut FALSE) ; comment dans ce cas peux-tu
imaginer pouvoir appeler $res->errorCode() ? FALSE->errorCode() ???