函数文件将无法识别包含的 PDO 数据库连接

Posted

技术标签:

【中文标题】函数文件将无法识别包含的 PDO 数据库连接【英文标题】:Function file will not recognize included PDO database connection 【发布时间】:2015-01-07 15:50:59 【问题描述】:

我有一个 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 结果,例如:

回显 $result['date'];

它说变量 $result 没有定义。知道为什么会这样吗?

再次感谢!

【问题讨论】:

【参考方案1】:

当你声明时

function getUI($username) 

$pdo 不可用,因为它超出了函数的范围。

您需要将其作为附加参数传入,或者找到其他机制在getUI() 中获取$pdo

If you need more information

【讨论】:

它解决了我的问题,但现在我在访问我的 $result 变量时遇到问题,因为它说它没有定义。例如,我正在尝试访问 $result['date'];它不会让我。有什么进一步的帮助吗?谢谢! 运行 var_dump($result); 以查看其中包含的所有内容在不同的步骤中。【参考方案2】:
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 对象作为第二个参数。

【讨论】:

它解决了我的问题,但现在我在访问我的 $result 变量时遇到问题,因为它说它没有定义。例如,我正在尝试访问 $result['date'];它不会让我。有什么进一步的帮助吗?谢谢! @user3245995,很高兴我能帮上忙!你能接受我的回答吗? @user3245995,将$result初始化放在函数顶部。编辑我的答案请检查。

以上是关于函数文件将无法识别包含的 PDO 数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

php和Pdo包括与其他页面的连接[重复]

php和Pdo包括与其他页面的连接[重复]

PHP试图使用自动加载函数来查找PDO类

我正在尝试将 PDO 和 OOP 结合起来,但无法正常工作

将数据库和PDO选项数组传递到我的连接PHP文件中

与PDO和Singleton类的数据库连接