我有一个单独的文件,其中包含我需要的PDO连接。
这是setConnection文件。
$Poll = new PDO("mysql:host=localhost;dbname=polls", "root", "", );
我试图在其他文件的类中使用此连接,所以我将其包含在内。
include_once "setConnections.php";
.
.
.
$Poll->query("....");
我在第12行获得了未定义的变量($ Poll-> ....)。
我在setConnections中定义了它,我做错了什么?
更多代码可以提供帮助。
include_once "setConnections.php";
class question{
private $id_poll;
private $title;
public function __construct($title, $id_poll){
$this->title = $title;
$this->id_poll = $id_poll;
}
public function insere(){
the message is saying the error is here $Poll->prepare("INSERT INTO perguntas (id_poll, pergunta) VALUES (?,?)");
$a->bindParams(1, $this->id_poll);
$a->bindParams(2, $this->title);
$insert = $a->execute();
if($insert >0){
return true;
}else{
return false;
}
}
答案 0 :(得分:3)
您在$Poll
内的全局范围内定义了PDO对象setConnections.php
,但它不在question
类内的任何位置。您需要将$Poll
放在作用域中,方法是将其作为参数传递给使用它的函数,或者将其设置为question
类对象的属性。我会使用属性方法,将其传递给构造函数。这称为依赖注入。
include_once "setConnections.php";
class question{
private $id_poll;
private $title;
// Add a new property for the PDO object
private $connection;
// Pass it to the constructor
public function __construct($title, $id_poll, $connection){
// Set the property
$this->connection = $connection;
$this->title = $title;
$this->id_poll = $id_poll;
}
public function insere(){
// Now use the connection property inside the class.
$this->connection->prepare("INSERT INTO perguntas (id_poll, pergunta) VALUES (?,?)");
$a->bindParams(1, $this->id_poll);
$a->bindParams(2, $this->title);
$insert = $a->execute();
if($insert >0){
return true;
}else{
return false;
}
}
另一种方法是将其明确传递给insere()
方法:
public function insere($connection){
// Now use the connection property inside the class.
$connection->prepare("INSERT INTO perguntas (id_poll, pergunta)VALUES (?,?)");
// etc...
}
在评论中提到存储连接“普遍”。这在你的类中是可实现的using the global
keyword,例如在构造函数中,但不推荐。
// This is not recommended.
public function __construct() {
global $Poll;
$this->connection = $Poll;
}
相反,最好将连接一次传递给构造函数,并将其作为类中的属性进行访问。
答案 1 :(得分:0)
创建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();
}
如果出现问题,您将看到该消息并知道问题所在。