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 :
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 :PHP utilise une classe PDO pour gérer SQLite 3 alors qu’il utilise des fonctions sqlite_*() pour sqlite 2.
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 />";
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.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
D'ailleurs, si j'exécute le code suivant :
Code : Tout sélectionner
echo sqlite_libversion();
Question donc : est-ce que ma déduction est juste ? Comment je fais pour attaquer ma base en v3 ?2.8.17
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