2011-10-15 2 views
1

J'utilise une classe Articles pour extraire des données de ma base de données à propos des ..articles. Je peux utiliser des instances pour insérer des données, les modifier mais je n'arrive pas à l'utiliser depuis un ensemble de pages différent. structure de dossier ressemble à ceci /cms/conf.php (avec preuves au travail define ("DB_DSN" [..] etc)PDOException uniquement dans certains cas d'utilisation

/cms/classes/Article.php

/about.php

dans about.php Je veux sortir des données de mon DB en utilisant une fonction statique dans mon article classe:

public static function getById($id) { 
     $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
     $sql = "SELECT * FROM articles WHERE id = :id"; 
     $st = $conn->prepare($sql); 
     $st->bindValue(":id", $id, PDO::PARAM_INT); 
     $st->execute(); 
     $row = $st->fetch(); 
     $conn = null; 
     if ($row) return new Article($row); 
    } 

Je l'appelle comme ceci: echo Article::getById(17)->content;

Pour obtenir un Fatal error: Uncaught exception 'PDOException' with message 'invalid data source name' [...] PDO->__construct('DB_DSN', 'DB_USERNAME', 'DB_PASSWORD') #1

Cependant, je peux utiliser la même méthode et la même syntaxe d'appel de méthode dans mon dossier de jouet /cms/dataentry.phpsans problèmes (soit de ligne de commande ou d'un navigateur Web) .

Je suppose que je fais de mauvaises hypothèses d'environnement? apps.php n'ont include 'cms/classes/Article.php';

version PHP 5.3.2

+0

Il semble 'DB_DSN' est invalide. Cette constante est-elle même définie? – KingCrunch

+0

Oui, je l'ai utilisé pour ajouter et récupérer manuellement des données avec du code dans le fichier '/ cms/dataentry.php'. (J'ai juste tronqué manuellement l'instruction 'define()' dans ma question) – Recct

+0

Je veux dire, est-ce que c'est défini au moment où vous essayez de l'utiliser? Essayez de 'var_dump()', définissez 'error_reporting()' sur quelque chose (de plus) utile, ... – KingCrunch

Répondre

1

DB_DSN ressemble il est pas défini lorsque vous essayez de créer une nouvelle instance PDO.

PHP cite automatiquement des constantes non définies, ce qui est la raison pour laquelle vous obtenez dans votre erreur:

PDO->__construct('DB_DSN', 'DB_USERNAME', 'DB_PASSWORD') 

Vous voudrez probablement require_once le fichier qui définit ces constantes chaque fois que vous les avez besoin

+0

Merci pour la réponse, mais il s'avère que le problème était différent. Dans la 'conf.php' on m'a donné il y avait déjà un besoin pour' Article.php'; suggérant apparemment que j'inclue 'conf.php' dans mes pages et ne touche plus' Article.php'. Faire ce que j'ai fait ne faisait que tourner en rond. – Recct

Questions connexes