Problème avec SQLite version 3

Eléphant du PHP | 60 Messages

03 juin 2008, 16:04

Bonjour.

J'avais cru comprendre en lisant le peu de doc que j'ai trouvé sur SQLite et en me plongeant dans SQLiteManager qu'il n'était pas très difficile de passer de SQLite v2 à v3.

Je me suis donc créé 2 petites bases de test dans SQLiteManager, une en v2 et l'autre en v3 : pas de problème pour piloter la v2 avec PHP, mais pas moyen avec la v3.

J'ai lu ça sur WikiPedia :
PHP utilise une classe PDO pour gérer SQLite 3 alors qu’il utilise des fonctions sqlite_*() pour sqlite 2.
J'en ai donc déduit que mon code procédural qui attaque la base en v2 n'était pas approprié et qu'il fallait du code orienté objet. Le voici :

Code : Tout sélectionner

$BD = new SQLiteDataBase("/Applications/MAMP/db/sqlite/exemple.sqlite"); $req = "SELECT * FROM test;"; $res = $BD->query($req); echo $res->numrows()."<br />";
Réponse à l'exécution :
Fatal error: Uncaught exception 'SQLiteException' with message 'SQLiteDatabase::__construct() [<a href='function.SQLiteDatabase---construct'>function.SQLiteDatabase---construct</a>]: file is encrypted or is not a database' in /Users/jeandupont/Documents/MAMP/Exemples/Bases de donnees/SQLite/Tests.php:22 Stack trace: #0 /Users/jeandupont/Documents/MAMP/Exemples/Bases de donnees/SQLite/Tests.php(22): SQLiteDatabase->__construct('/Applications/M...') #1 {main} thrown in /Users/jeandupont/Documents/MAMP/Exemples/Bases de donnees/SQLite/Tests.php on line 22
L'histoire du "file is encrypted or is not a database" me fait penser que le fichier de la base n'est pas reconnu comme tel à cause de la différence de version : j'attaque la base avec SQLite v2 alors que c'est une base v3.
D'ailleurs, si j'exécute le code suivant :

Code : Tout sélectionner

echo sqlite_libversion();
J'obtient la réponse suivante :
2.8.17
Question donc : est-ce que ma déduction est juste ? Comment je fais pour attaquer ma base en v3 ?

Et puis une petite question subsidiaire : dans SQLiteManager (1.2.0), on peut choisir la version d'une base au moment où on la crée, mais peut-on changer de version après coup ?

Merci d'avance
Ils ne savaient pas que c'était impossible, alors ils l'ont fait...

ViPHP
ViPHP | 4039 Messages

03 juin 2008, 23:25

salut salut, j'ai pas trop le temps, alors je vais juste te guider:

La compatibilité est dure à avoir avec sqlite.
Il est même impossible de lire, en v3, une db crée avec la v2. Le mieux à faire, c'est de créer la db directement a partir de php, dans la version qu'il faut.

Pour utiliser sqlite v3, il faut utiliser pdo, et "new sqlitedatabase" est tout sauf du pdo. Une ouverture en pdo serait plutôt ainsi:
$dbh = new PDO('sqlite:c:/tmp/foo.db'); 
Voici toujours un lien pour t'orienter:
http://be.php.net/manual/fr/ref.pdo-sqlite.php

Sqlite est assez riche, et je me souviens en avoir écrit plusieurs sujets sur le forum.

En voici toujours un:
http://www.phpfrance.com/forums/voir_su ... sqlite.php

Ou comment utiliser la dernière version de sqlite en pdo.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.