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 ?