[PHP/SQLITE] Lecture des données dans un fichier .db

Lecture des données dans un fichier .db [PHP/SQLITE] - PHP - Programmation

Marsh Posté le 08-11-2006 à 08:27:42    

Bonjour,
 
Dans le cadre d'un projet, je dois, en PHP5, lire un fichier .db qui contient une base de données SQLITE. Ce fichier, que je nomme ici toto.db, a est initialement géré sous WinCE; et on me l'envoie sous forme brute. J'ai déjà une base MySQL5, dans laquelle j'ai créé les mêmes tables que celles de la base SQLITE et je dois maintenant remplir ma base MySQL à partir des données SQLITE.
 
Le pb, c'est que sous WAMP 1.6.3, SQLITE Manager n'arrive pas à lire le fichier toto.db...probablement parce qu'il a été généré sous WinCE. Du coup, je sais pas comment commencer, quel outil utiliser pour manipuler mon toto.db et en extraire ses données.
 
Voilà, si vous pouvez m'aider, ben ça serait hyper cool!  
 
En plus, quand j'ouvre le toto.db avec le blocnotes, c'est une sorte de mélange de SQL et d'HTML...assez incompréhensible...pour moi du moins.
 
Merci de votre aide.

Reply

Marsh Posté le 08-11-2006 à 08:27:42   

Reply

Marsh Posté le 08-11-2006 à 10:13:04    

ouvre avec la bonne version de sqlite, 2 et 3 sont incompatibles

Reply

Marsh Posté le 09-11-2006 à 08:37:10    

Merci de ta réponse, mais mon fichier db et SQLITE de WAMP sont tous les deux en version 3.
 
Sinon j'ai fait une petite interface d'importation de fichier en php. Je le sélectionne avec "Parcourir" et je le lis avec le code:
 
<?php
if($db = sqlite_open($_FILES["fichier"]["name"], 0666, $messageerreur)) {
 
       $requete="SELECT Id FROM Tests";
 
       $result = sqlite_query($db,$requete);
 
       while ($row = sqlite_fetch_array($result))
             echo $row['Id'];
} else {
  die ($messageerreur);
}
?>
 
Le pb c'est qu'avec ce code j'obtiens rien, ni erreur, ni valeur de la base.
 
Tu as une idée de pourquoi ça marche pas?
 
Sinon il faut qu'il soit stocké où sur le disque le fichier db pour pouvoir être lu avec sqlite_open?
 
Merci de ton aide.

Reply

Marsh Posté le 26-02-2009 à 16:59:51    

J'ai le même problème : je fais un upload d'un fichier db de mon mobile vers le serveur et je veux que le serveur récupère des infos issues de 2 des tables contenues dans le metadata.db récupéré.
Vue l'ancienneté de la question, puis-je espérer que la réponse a été trouvé entre temps ?
A priori, je préfèrerais pouvoir extraire les données dans un format texte plutôt que de devoir les recharger dans une base.

Reply

Marsh Posté le 26-02-2009 à 17:34:49    

Bah regarde déjà si tu peux l'ouvrir avec l'outil en ligne de commande de sqlite ou avec un front-end graphique.
 
En ligne de commande, tu peux entrer la commande ".schema" pour obtenir le schéma de la base et récupérer le nom des tables susceptibles de t'intéresser.
 
Après c'est des bêtes requètes SQL pour récupérer les données.

Reply

Marsh Posté le 26-02-2009 à 18:50:34    

Ce qui marche sans problème sous dos, avec sqlite3.exe c'est :
 
sqlite.exe fichier.db
.output fichier.sql
.dump
.output stdout
.exit
 
Ça me donne un fichier texte dont je peux faire ce que je veux, facile à explorer pour en extraire les quelques lignes qui m'intéressent, dans pour autant aller recréer une base de données dont je n'ai pas l'usage.
Ce que je ne sais pas encore faire, c'est la même chose sous php.
 
Ceci dit, il y a deux jours j'ignorais jusqu'à l'existence de  sqlite, ceci expliquant peut-être cela.

Reply

Marsh Posté le 26-02-2009 à 23:52:31    

php utilise des fonctions differente pour se connecter a une base sqlite2 et sqlite3.
sqlite2 -> http://fr.php.net/manual/en/book.sqlite.php
sqlite3 -> http://fr.php.net/pdo

Reply

Marsh Posté le 27-02-2009 à 14:35:17    

Avec sqlite3.exe, j'ai pu faire un fichier batch qui fonctionne :
 
Il contient ceci :
sqlite3.exe machin.db .out > machin.sql
rem Vérification du résultat :
type machin.sql
 
Reste à voir si php va accepter de lancer ce batch :
<?php
exec('test.bat');
?>
 
Et le tour est joué. Il reste à paramétrer les noms de fichiers en entrée et en sortie en se rappelant les vieilles commandes apprises du temps de MS/DOS :
sqlite3.exe %1.db .out > %1.sql
rem Vérification du résultat :
type %1.sql
 
Sous DOS, on lance test machin
Sous php :
<?php
$monFichier = "machin";
exec('test.bat '.$monFichier);
?>
 
Il reste seulement à mettre les bons chemins pour que tout ne traîne pas dans le répertoire courant et à écrire le programme qui lira le fichier texte machin.sql pour en extraire les données voulues ou pour le modifier.
 
La création d'une base de données ne me convient pas car le fichier db est uploadé par plusieurs utilisateurs, qui écraseraient mutuellement leurs données car ils utiliseraient les mêmes tables.
Dans ma solution, l'upload change le nom du fichier d'origine truc.db en nom_utilisateur.db. Donc $monFichier = "nom_utilisateur" et du coup je travaille sur des fichiers textes personnalisés. Ma base MySQL est bien entendu alimentée avec le résultat des traitements.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed