【发布时间】:2014-05-24 07:50:30
【问题描述】:
我一直在寻找和测试不同的方法来解决我的问题,但我仍然找不到该死的解决方案。我是 PHP 新手,我正在尝试自学使用 PDO。
db.php:
<?php
$dsn = 'mysql:myHost=localhost;dbname=ewt';
$user= 'root';
$pass = '';
try {
$pdo = new PDO($dsn, $user, $pass);
$pdo ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
showCust.php
<?php
include_once('db.php');
try {
$sql = "SELECT * FROM PERSOON";
$result = $pdo->query($sql);
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo $row['VOORNAAM']. ' - '. $row['NAAM']. ' - '. $row['EMAIL']. ' - '. $row['ADRES']. '<br />';
}
$pdo = null;
}
catch(PDOException $e) {
echo $e->getMessage();
}
当我在 showCust.php 中复制 db.php 代码时,它可以完美运行,但我想将数据库连接与其他所有文件分开。我知道它必须与 $pdo 的范围有关,但我就是想不通...
我不断收到的错误是:
注意:未定义变量:pdo ... 第 9 行
致命错误:在 ... 第 9 行中对非对象调用成员函数 query()
我知道数据库没有密码。这纯粹是为了测试目的。
提前致谢!
【问题讨论】:
-
问题不是
mysql:myHost,而是mysql:host=localhost@user3511568。 -
我用我的凭据测试了你的代码,没有问题。 @user3511568 你确定你正在使用这些文件,你在哪里使用它,在你自己的本地主机或托管服务上?另外,如前所述,使用
mysql:host=localhost。 -
addCust.php是否也包含include_once('db.php');?而不是include_once使用include然后 @user3511568 在这一点上听起来肯定是范围问题。 -
try..catch对变量范围的影响为零(参见上面的链接重复)。您显示的代码中唯一真正的可能性是该文件未包含在内,期间。这可能是因为您之前已在其他地方包含它并且正在使用_once(正如 Sense 解释的那样),或者因为该文件不存在并且include没有因此而终止脚本。尝试require而不是include_once。另一种可能性是您展示的示例与您的真实代码无关,而您的真实代码中存在完全不同的问题。