2010-12-09 78 views
1

J'ai des problèmes pour configurer PDO dans mon framework de site Web.PHP PDO Problème

J'ouvre ma connexion dans « system.php » qui est inclus au début de chaque page avec ce code ici

try { 
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass, 
     array(PDO::ATTR_PERSISTENT => true)); 
} 
catch(PDOException $e) { 
    echo $e->getMessage(); 
} 

et sur le même fichier (system.ph) Je l'appelle en dessous:

$STH = $DBH->query('SELECT value FROM settings WHERE type="theme"'); 
$STH->setFetchMode(PDO::FETCH_ASSOC); 
while($row = $STH->fetch()) { 
    define('THEME', 'themes/'.$row['value'].'/'); 
} 

Qui fonctionne parfaitement!

Cependant, quand je l'appelle la même requête que précédemment sur "default.php" (qui est inclus dans le fichier), il revient avec:

Notice: Undefined variable: DBH in /pages/default.php on line 15 

    Fatal error: Call to a member function query() on a non-object 
in /pages/default.php on line 15 

ce que je fais mal ici?

default.php

<?php 
$STH = $DBH->query('SELECT value FROM settings WHERE type="theme"'); 
$STH->setFetchMode(PDO::FETCH_ASSOC); 
while($row = $STH->fetch()) { echo $row['value']; } 
?> 
+0

Pouvez-vous nous montrer default.php? –

+0

C'est exactement le même extrait. query ('SÉLECTIONNER la valeur FROM settings WHERE type = "theme"'); \t $ STH-> setFetchMode (PDO :: FETCH_ASSOC); \t while ($ row = $ STH-> fetch()) { \t \t echo $ row ['valeur']; ?> –

+0

cela fonctionne-t-il si vous encapsulez le code default.php dans une définition de fonction, et appelez cette fonction dans le script principal? –

Répondre

1

Si elle est dans une fonction ajouter

global $DBH; 

dans la fonction avant d'appeler la fonction requête().

+0

Aucune différence Remarque: Variable non définie: DBH dans pages/default.php sur la ligne 15 Erreur fatale: appel à une fonction membre query() sur un non-objet dans pages/default.php on ligne 15 –

+1

Y a-t-il deux fichiers 'default.php'? Supprimez tout le contenu de default.php et exécutez-le. Assurez-vous que c'est le même fichier. – Manu

+0

essayé cette fois dans un endroit différent - fixe grâce –

1

On dirait que ce fichier n'est pas inclus dans default.php pour une raison quelconque. Y a-t-il un boot strapper quelque part qui fait le nécessaire pour vous avant que default.php ne soit chargé?

De même, assurez-vous que vous n'obtenez pas d'erreur sur le chemin qui charge default.php. Il me semble que $DBH serait indéfini s'il y avait une exception. Utilisez-vous un buffer de sortie quelque part qui pourrait être effacé avant que vous puissiez voir l'écho de l'exception? Vous pouvez envisager de consigner vos exceptions dans un fichier texte à la place afin que la mise en mémoire tampon de sortie ne vous empêche pas de voir les erreurs qui se produisent.

+0

Ma structure est mis en place afin - charges index.php System.php charges System.php theme.php charges theme.php default.php (par défaut étant en un autre répertoire où tout le «contenu» est stocké) –

+0

Ajout de commentaires à ma réponse concernant '$ DBH' étant indéfini si une exception se produit. ^ – sholsinger