gpt4 book ai didi

php - PDO 对象不在函数范围内

转载 作者:行者123 更新时间:2023-12-02 05:05:29 25 4
gpt4 key购买 nike

好的,我看到了一些与我的类似的问题,但是他们的示例都使用了 PHP 类……我的没有。也许这就是问题所在?我不需要类(class),因为此时我的网站非常简单。

无论如何,我正在尝试使用 PDO 连接到 MySQL 数据库。我在名为 config.php 的文件中正常连接到数据库,并使用 require_once() 将此文件包含在 index.php 中。

我可以从另一个名为 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 作为参数传递给我的函数,瞧。

最佳答案

那是 pretty basic PHP stuff .函数内的变量是局部变量,除非您使用 global 关键字来加载它们。我想你想要这个:

function authenticate(PDO $pdo, $u, $p) {
$que = $pdo->query('select user_id, user_pass from users where user_name = \'' . $u . '\' limit 1');
//...
}

编辑:如果 PHP 声明 $pdo 不是一个对象,那么它就不是一个对象,因此它如何传递给函数并不重要。在调用 authenticate() 之前检查变量:

var_dump($pdo);

没有相关代码就无法说明原因。 (假设 new PDO 成功。)

关于php - PDO 对象不在函数范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16342058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com