我正在使用 Articles 类从我的数据库中提取关于 ..articles 的数据。我可以使用实例来插入数据、修改它,但我似乎无法从不同的页面集使用它。
文件夹结构如下所示
/cms/conf.php
(已证明可以工作 define("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)->内容;
获取 fatal error :未捕获的异常“PDOException”,消息为“无效数据源名称”
[...] PDO->__construct('DB_DSN', 'DB_USERNAME', 'DB_PASSWORD') #1
但是我可以在我的玩具文件 /cms/dataentry.php
中使用相同的方法和相同的方法调用语法 没有问题(从命令行或网络浏览器).
我想我做出了错误的环境假设? apps.php
确实有 include 'cms/classes/Article.php';
PHP 版本 5.3.2
最佳答案
当您尝试创建新的 PDO
实例时,
DB_DSN
看起来没有定义。
PHP 自动引用未定义的常量,这就是为什么您会在错误中得到这个:
PDO->__construct('DB_DSN', 'DB_USERNAME', 'DB_PASSWORD')
您可能希望 require_once
在任何需要的地方定义这些常量的文件
关于php - PDOException 仅在某些用例中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7781422/