par
Louisss » 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 :
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
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 :
[quote]PHP utilise une classe PDO pour gérer SQLite 3 alors qu’il utilise des fonctions sqlite_*() pour sqlite 2.[/quote]
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]
$BD = new SQLiteDataBase("/Applications/MAMP/db/sqlite/exemple.sqlite");
$req = "SELECT * FROM test;";
$res = $BD->query($req);
echo $res->numrows()."<br />";
[/code]
Réponse à l'exécution :
[quote]
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
[/quote]
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]
echo sqlite_libversion();
[/code]
J'obtient la réponse suivante :
[quote]
2.8.17
[/quote]
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