PDOException仅在某些用例中

时间:2011-10-15 23:41:00

标签: php mysql

我正在使用一个Articles类来从我的数据库中提取关于..articles的数据。我可以使用实例来插入数据,修改它但我似乎无法从不同的页面集中使用它。 文件夹结构如下所示 /cms/conf.php(已证明可以工作定义(“DB_DSN”[..]等)

/cms/classes/Article.php

/about.php

about.php中的

我想在我的文章类中使用静态函数从我的数据库中提取数据:

   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);
    }

我称之为: echo Article::getById(17)->content;

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

但是,我可以在我的玩具文件/cms/dataentry.php 中使用相同的方法和相同的方法调用语法(来自命令行或Web浏览器)。

我猜错了环境假设? apps.php确实有include 'cms/classes/Article.php';

PHP版本5.3.2

1 个答案:

答案 0 :(得分:1)

当您尝试创建新的DB_DSN实例时,

PDO看起来没有定义。

PHP自动引用未定义的常量,这就是你在错误中得到这个的原因:

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

您可能希望require_once在您需要的地方定义这些常量的文件