功能文件无法识别包含的PDO数据库连接

时间:2014-11-11 06:42:58

标签: php mysql pdo include require-once

我有一个func.php文件,其中包含一个获取用户详细信息的函数:

require_once 'connection.php';

function getUI($username){

    $query = "SELECT * FROM usernames WHERE username = ?";

    $sth = $pdo->prepare($query);

    $sth->bindValue(1, $username);

    $sth->execute();

    $result = $sth->fetch(PDO::FETCH_ASSOC);

    return $result;
} 

在我的connection.php中我有:

require_once 'details.php';

$pdo = new PDO("mysql:host=" . $dabhost . "; dbname=" . $dabname ."", $dabusern, $dabpassw);

并在details.php中我有:

$dabhost = "localhost";
$dabname = "dab1";
$dabusern = "root";
$dabpassw = "root";

最后,我有我的userdetails.php,它有一堆HTML代码,并显示函数getUI()带来的结果。我在开头需要func.php:

require_once'folder1 / func.php';

我的目录如下所示:

rootfolder/userdetails.php
rootfolder/folder1/details.php
rootfolder/folder1/connection.php
rootfolder/folder1/func.php

问题是当我打开userdetails.php时,我的php_error.log文件中出现错误,说明如下:

PHP Notice:  Undefined variable: pdo in /rootfolder/folder1/func.php on line 58
PHP Fatal error:  Call to a member function prepare() on null in /rootfolder/folder1/func.php on line 58

如果我只是将所有代码放在userdetails.php的顶部,那么它会起作用并带回预期的结果。因此,我认为我需要变量的文件/范围有什么问题......

有人可以向我解释我做错了什么吗?

非常感谢您的帮助!

非常感谢!

更新:

将我的$ pdo连接作为函数中的第二个参数传递解决了我的问题,但现在我无法从返回的$ return变量中检索x结果,例如:

echo $ result ['date'];

它表示变量$ result未定义。知道为什么会发生这种情况吗?

再次感谢!

2 个答案:

答案 0 :(得分:0)

宣布

function getUI($username) {}

$pdo不可用,因为它不在函数范围内。

您需要将其作为附加参数传递,或者找到一些其他机制,以便在$pdo内获取getUI()

If you need more information

答案 1 :(得分:0)

require_once 'connection.php';

function getUI($username,$pdo){

    $result = null ;

    $query = "SELECT * FROM usernames WHERE username = ?";

    $sth = $pdo->prepare($query);

    $sth->bindValue(1, $username);

    $sth->execute();

    $result = $sth->fetch(PDO::FETCH_ASSOC);

    return $result;
}

注意:调用上面的函数时,将PDO对象作为第二个参数传递。