好的,我看到一些类似的问题,但他们的例子都使用PHP类...我的不是。也许这就是问题所在?我不应该需要上课,因为我的网站在这个时候非常简单。PDO对象不在函数范围内
无论如何,我正在尝试使用PDO连接到MySQL数据库。我在一个名为config.php
的文件中连接到数据库,并在index.php
中使用require_once()
包含此文件。
我可以成功地从另一个名为process.php
的文件查询数据库,但问题在该文件中的函数内;看起来我的DBO对象超出了该功能的范围。
下面是相关的代码片段:
的index.php
require_once('./lib/config.php');
的config.php
// tested and connects fine
$pdo = new PDO('mysql:host=' . $hostname . ';dbname=' . $dbname, $username, $password, array(
PDO::ATTR_PERSISTENT => true
));
process.php
<?php
...
// can call $pdo fine in this file outside of functions
...
function authenticate($u, $p) {
// can't call $pdo in here, error says $pdo is non-object
$que = $pdo->query('select user_id, user_pass from users where user_name = \'' . $u . '\' limit 1');
...
}
?>
顺便说一下,我使用的是PDO,因为我有类似的问题mysqli
,并试图摆脱mysql
,这显然是贬值和泄气。
编辑:我应该基于的回答,我在这个问题上得到了数首先澄清:我曾尝试通$ PDO作为一个参数去功能,随着错误消息没有运气或改变。
解决方法:好的,显然问题是我需要在我的process.php文件中添加require_once('config.php')
。不知道为什么(当index.php首先运行时,是不是已经包含它了?)。然后,我成功地将$pdo
作为参数传递给我的功能,并且瞧。
在您的身份验证功能,'$ pdo'超出范围。将其作为参数传入,或将其声明为全局。 – andrewsi 2013-05-02 15:36:15
如果你确实需要,在你的函数内声明它为'global $ pdo;'。你最好通过它,或者把'authenticate'放在课堂上。 – Aleph 2013-05-02 15:36:28
使用适当的类和对象,然后使用依赖注入。 – 2013-05-02 15:36:54