sqlite_close() ne fonctionne pas ?
Posté : 05 août 2008, 17:50
Bonjour.
Je viens (encore) de remarquer un détail étrange dans SQLite : on dirait que la fonction sqlite_close() ne fonctionne tout simplement pas. Voici un petit bout de code avec lequel je l'ai testée :
Il y a 3 enregistrements dans cette table test, donc logiquement, le premier echo devrait afficher 3, et le second un warning ou un message d'erreur puisque la base est fermée entre les deux.
Et bien non, les deux echo affichent le même résultat, comme si la base était toujours ouverte.
J'en déduit donc qu'en plus d'être rarement utile puisqu'une base est automatiquement fermée à la fin du script, cette fonction ne marche pas. Y aurait-il un détail qui m'échappe ?
Oui, il y a effectivement un détail qui m'avait échappé et que voici :
En fait c'est la variable $res de mon code qui n'a pas changé de valeur à sa deuxième affectation (probablement à cause du fait que $BD ne pointait plus sur rien). Du coup, il est finalement normal que les deux echo affichent le même résultat puisque c'est en fait $res qui contient le résultat affiché.
Le code suivant avec juste une réinitialisation de $res après le sqlite_close() montre que la fermeture a bien fonctionné :
Cette fois-ci, le deuxième sqlite_query() se solde par un warning du type "not a valid sqlite database resource".
Le seul truc que je ne comprend pas, c'est pourquoi ce warning n'apparaît pas systématiquement ?
Je viens (encore) de remarquer un détail étrange dans SQLite : on dirait que la fonction sqlite_close() ne fonctionne tout simplement pas. Voici un petit bout de code avec lequel je l'ai testée :
Code : Tout sélectionner
$BD = sqlite_open("exemple.sqlite", 0666);
$req = "SELECT * FROM test;";
$res = sqlite_query($BD, $req);
echo "Nombre d'enregistrements trouvés : ".sqlite_num_rows($res);
sqlite_close($BD);
$req = "SELECT * FROM test;";
$res = sqlite_query($BD, $req);
echo "<br />Nombre d'enregistrements trouvés : ".sqlite_num_rows($res);
Et bien non, les deux echo affichent le même résultat, comme si la base était toujours ouverte.
J'en déduit donc qu'en plus d'être rarement utile puisqu'une base est automatiquement fermée à la fin du script, cette fonction ne marche pas. Y aurait-il un détail qui m'échappe ?
Oui, il y a effectivement un détail qui m'avait échappé et que voici :
En fait c'est la variable $res de mon code qui n'a pas changé de valeur à sa deuxième affectation (probablement à cause du fait que $BD ne pointait plus sur rien). Du coup, il est finalement normal que les deux echo affichent le même résultat puisque c'est en fait $res qui contient le résultat affiché.
Le code suivant avec juste une réinitialisation de $res après le sqlite_close() montre que la fermeture a bien fonctionné :
Code : Tout sélectionner
$BD = sqlite_open("exemple.sqlite", 0666);
$req = "SELECT * FROM test;";
$res = sqlite_query($BD, $req);
echo "Nombre d'enregistrements trouvés : ".sqlite_num_rows($res);
sqlite_close($BD);
$res = 0;
$req = "SELECT * FROM test;";
$res = sqlite_query($BD, $req);
echo "<br />Nombre d'enregistrements trouvés : ".sqlite_num_rows($res);
Le seul truc que je ne comprend pas, c'est pourquoi ce warning n'apparaît pas systématiquement ?