Php 未定义变量PDO连接

Php 未定义变量PDO连接,php,pdo,Php,Pdo,我有一个单独的文件,其中包含我需要的PDO连接 这是setConnection文件 $Poll = new PDO("mysql:host=localhost;dbname=polls", "root", "", ); 我试图在另一个文件的类中使用此连接,所以我将其包括在内 include_once "setConnections.php"; . . . $Poll->query("...."); 我在第12行得到了“未定义变量($Poll->…) 我在setConnections中定

我有一个单独的文件,其中包含我需要的PDO连接

这是setConnection文件

$Poll = new PDO("mysql:host=localhost;dbname=polls", "root", "", );
我试图在另一个文件的类中使用此连接,所以我将其包括在内

include_once "setConnections.php";
.
.
.
$Poll->query("....");
我在第12行得到了“未定义变量($Poll->…)

我在setConnections中定义了它,我做错了什么

更多代码来帮助


当您创建新的
PDO
实例时,是否有任何错误处理机制

try {
    $dbh = new PDO("mysql:host=localhost;dbname=polls", "root", "", );
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

如果出现问题,您将看到消息并知道问题所在。

在创建新的
PDO
实例时,您是否有任何错误处理机制

try {
    $dbh = new PDO("mysql:host=localhost;dbname=polls", "root", "", );
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

如果出现问题,您将看到消息并知道问题所在。

您在
setConnections.php
中的全局范围内定义了PDO对象
$Poll
,但它不在
问题
类的任何范围内。您需要将
$Poll
作为pa传递到范围内参数到使用它的函数,或者将它设置为
问题
类对象的属性。我将使用property方法,将其传递给构造函数。这称为依赖项注入

另一种方法是显式地将其传递给
insere()
方法:

    public function insere($connection){
        // Now use the connection property inside the class.
        $connection->prepare("INSERT INTO perguntas (id_poll, pergunta)VALUES (?,?)"); 
        // etc...
    }
在您提到的注释中,存储连接是“通用的”。这在类中是可以实现的,例如在构造函数中,但不推荐

// This is not recommended.
public function __construct() {
  global $Poll;
  $this->connection = $Poll;
}

相反,最好将连接传递给构造函数一次,并将其作为类中的属性访问。

您在
setConnections.php
的全局范围内定义了PDO对象
$Poll
,但它不在
问题
类中的任何范围内。您需要将
$Poll
放入将其作为参数传递给使用它的函数,或将其设置为类对象的属性。我将使用property方法,将其传递给构造函数。这称为依赖项注入

另一种方法是显式地将其传递给
insere()
方法:

    public function insere($connection){
        // Now use the connection property inside the class.
        $connection->prepare("INSERT INTO perguntas (id_poll, pergunta)VALUES (?,?)"); 
        // etc...
    }
在您提到的注释中,存储连接是“通用的”。这在类中是可以实现的,例如在构造函数中,但不推荐

// This is not recommended.
public function __construct() {
  global $Poll;
  $this->connection = $Poll;
}


相反,最好将连接一次性传递给构造函数,并将其作为类内的属性访问。

您没有发布足够的上下文相关代码,但几乎可以肯定的是,您要么在函数内定义了
$Poll
,试图在另一个函数中使用它,要么在全局范围内定义了
$Poll
但是我们试图在函数中使用它。如果在调用
new PDO()时同时发布更多的周围代码
当您以后使用
$Poll
时,我们可以帮助您解决可能的变量作用域问题。问题中还有更多的代码。我认为我的错误与变量作用域有关。
setConnections.php
中的代码如何?
$Poll
是在该文件中全局定义的,还是在函数中定义的?首先,
$Poll
必须作为参数传递给
insere()
。否则它不在范围内。它也可以传递给构造函数并作为
问题
类的属性存储。不,Poll全局存储在setConnection中,没有其他内容。创建“通用”的最佳方法是什么“文件来存储我的所有连接,并且不必每次都将$Poll作为参数传递?您没有发布足够的上下文相关代码,但几乎可以肯定的是,您在函数中定义了
$Poll
,并试图在不同的函数中使用它,或者在全局范围内定义了
$Poll
,但正在尝试在函数内使用它。如果在调用
new PDO()
时以及以后使用
$Poll
时都发布了更多的相关代码,我们可以帮助您解决可能的变量作用域问题。还有更多的代码有待解决。我认为我的错误与变量作用域有关。那么
setConnections.php
中的代码呢?
$Poll
是在该文件中全局定义的,还是在函数中定义的?首先,
$Poll
必须作为参数传递给
insere()
。否则,它不在范围之内。它也可以被传递给构造函数,并作为
question
类的属性存储。不,Poll全局存储在setConnection中,没有其他内容。创建一个“通用”文件来存储我的所有连接,并且不必每次都将$Poll作为参数传递的最佳方法是什么?如果不是,PDO异常将是致命的,并在后续代码之前停止没有问题和错误,屏幕上没有任何内容如果不是,PDO异常将是致命的,并在后续代码之前停止。没有问题,没有错误,屏幕上没有任何内容。谢谢。我认为这是一个范围问题,但我不知道如何解决它。现在你给了我一个更好的视角。我的Web服务器可能有问题。我照你说的做了$pdoVar=new-PDO(“mysql:host=localhost;dbname=polls”,“根”,“根”)$Pergs=新问题($perguntas,$poll,$pdoVar);我一直有同样的问题:注意:未定义的变量:第20行C:\xampp\htdocs\Poll\classes\perguntas.php中的连接致命错误:第20行C:\xampp\htdocs\Poll\classes\perguntas.php中null上的成员函数query()调用20@MatheusSilva我不能不看你现在的代码,但是
未定义变量$connection
表明您可能在类中使用了
$connection
,而不是
$this->connection
。哦,我看到了上面的错误-我在
insere()中省略了
$this
。我很抱歉,谢谢,我也没看到我的错,谢谢。我认为这是一个范围问题,但我不知道如何解决它。现在你给了我一个更好的视角。我的网络服务器可能有