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

Eléphanteau du PHP | 14 Messages

10 févr. 2011, 18:01

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.
"Errare humanum est, perseverare diabolicum"

ViPHP
xTG
ViPHP | 7331 Messages

10 févr. 2011, 18:37

$dbh = new PDO('sqlite:' . $DATABASE');

Eléphanteau du PHP | 14 Messages

10 févr. 2011, 18:55

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.
Modifié en dernier par fredmj le 10 févr. 2011, 19:09, modifié 1 fois.
"Errare humanum est, perseverare diabolicum"

ViPHP
xTG
ViPHP | 7331 Messages

10 févr. 2011, 19:03

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 ?

Eléphanteau du PHP | 14 Messages

10 févr. 2011, 19:26

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.
"Errare humanum est, perseverare diabolicum"

Eléphanteau du PHP | 14 Messages

10 févr. 2011, 20:01

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.
"Errare humanum est, perseverare diabolicum"