Page 1 sur 1

Passer le nom d'une base de données sqlite par une variable

Posté : 10 févr. 2011, 18:01
par fredmj
Bonjour à tous,

Comme je l'indique dans mon titre, mon problème consiste en ce qui suit :

Je voudrais transformer mes lignes du type :
$dbh = new PDO('sqlite:/chemin/vers/la/base_de_donnees');
par quelque chose qui me permeterait d'utiliser une variable. Dans le genre suivant :
$dbh = new PDO('sqlite:'$DATABASE');
Mes tentatives restent vaines pour le moment. Quelqu'un aurait-il une solution?

A+
Fred.

Re: Passer le nom d'une base de données sqlite par une variable

Posté : 10 févr. 2011, 18:37
par xTG
$dbh = new PDO('sqlite:' . $DATABASE');

Re: Passer le nom d'une base de données sqlite par une variable

Posté : 10 févr. 2011, 18:55
par fredmj
Merci Xtg pour ta réponse mais cela ne fonctionne pas chez moi.

Cela provient-il du fait que ma variable $DATABASE est l'union d'une variable global et d'une chaîne de caractères?
global $DATABASE;
$dbh = new PDO('sqlite:'.$DATABASE);
Comment puis-je forcer le type de ma nouvelle variable $DATABASE à STRING ?

EDIT : En fait je ne sais pas d'où cela provient.
Ma variable $DIRECTORY est récupérée depuis une autre page .php via un appel à la fonction file() comme ceci* :
$CONFIGFILE = "./fichier.cfg";
$DATACONFIG = file($CONFIGFILE);
foreach ($DATACONFIG as $line) {
$data = explode ('=',$line);
  switch ($data[0]) {
       case DATABASE:
       $DATABASE=$data[1];
       break;
[...]
et le fichier.cfg comporte une ligne
DATABSE=/chemin/vers/la/database.db

* Après modifications pour simplifier le code.

Re: Passer le nom d'une base de données sqlite par une variable

Posté : 10 févr. 2011, 19:03
par xTG
Quel est le type de $DIRECTORY ? Si c'est une string il n'y a aucun problème de concaténation dans ce code.
Mais ne te manquerait-il pas les identifiants pour la connexion ?
Quelle est l'erreur PHP affichée ?

Re: Passer le nom d'une base de données sqlite par une variable

Posté : 10 févr. 2011, 19:26
par fredmj
OK, il n'y a pas de problème de type.
Mais si je définie une variable
$DATABASE_BIS = '/chemin/vers/la/database.db';
$dbh = new PDO('sqlite:'.$DATABASE_BIS);
cela fonctionne.

l'erreur affichée est (désolé de ne pas avoir cherché plus tôt de ce coté là) :

Code : Tout sélectionner

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [14] unable to open database file' in /var/www/htdocs/TEST/envirolib/libenviro.php:32 Stack trace: #0 /var/www/htdocs/TEST/envirolib/libenviro.php(32): PDO->__construct('sqlite:/var/www...') #1 /var/www/htdocs/TEST/enviro.php(53): Env() #2 {main} thrown in /var/www/htdocs/TEST/envirolib/libenviro.php on line 32

Code : Tout sélectionner

/var/www/htdocs/TEST/envirolib/libenviro.php
est la page qui tente la connexion à la base de donnée qui elle se trouve

Code : Tout sélectionner

/var/www/htdocs/TEST/DB/enviro.db
Et un simple print "[DB = $DATABASE]"; m'affiche correctement le nom de ce fichier qui possède les bon droits.

PS : Tu auras remarqué que j'ai édité mon précédent post, rendant la variable $DIRECTORY obsolète.

Re: Passer le nom d'une base de données sqlite par une variable

Posté : 10 févr. 2011, 20:01
par fredmj
OK!
Le problème provient du fait (cf ce post http://www.mail-archive.com/sqlite-user ... 28190.html) que l'utilisateur du serveur http doit avoir les droits en écriture sur le répertoire contenant la base de donnée.
Il va absolument falloir que j'active les logs de php. J'imagine que ce genre d'information y serait largement visible.

Un grand merci à XtG pour ses réponses.

Fred.