好的,2个单独的php文件,一个是主脚本,另一个是类。我正在尝试使用PDO连接到SQL数据库。我在主脚本中创建PDO连接,然后将其传递给另一个脚本中的一个类,在那里进行查询。但是,我收到以下错误:
Fatal error: Call to a member function prepare() on a non-object in /Applications/XAMPP/xamppfiles/htdocs/test/class.php on line 16
我的理解是PHP可以跨脚本传递对象的引用,但是错误说该对象不存在。
下面是主要的PHP脚本,创建PDO对象并传递给要播放的类。
<?php
session_start();
unset($_SESSION['reference']);
require('class.php');
//connect to database, I know that username and password are not included
$dsn = 'mysql:dbname=test;host=localhost';
try {
$dbh = new PDO($dsn);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die ( 'Connection failed: ' . $e->getMessage() );
}
$objReference = new reference($dbh);
$reference = $objReference->getReference();
$_SESSION['reference'] = $reference;
session_write_close();
?>
下面是class.php文件。接收对象并获取数据。
<?php
class reference
{
private $reference;
private $dbh;
public function __construct($dbh) {
$this->dbh=$dbh;
$this->setReference();
}
private function setReference() {
$refid=$dbh->prepare(" SELECT MAX(id) FROM createX ");
$refid->execute();
$id = $refid->fetchColumn();
$id=$id+1;
$this->reference = $id;
}
public function getReference() {
return $this->reference;
}
}
?>
是否有另一种方法将PDO对象传递给我不知道的类?谢谢大家。
答案 0 :(得分:2)
由于$dbh
是一个实例变量,因此在setReference
函数中,您应该使用伪$this
来引用它:
$refid=$this->dbh->prepare(" SELECT MAX(id) FROM createX ");
即。使用$this->dbh
。
答案 1 :(得分:0)
您收到该错误的原因是您的数据库连接失败。当您尝试实例化PDO对象时,您似乎忘记了传递密码参数。
如果您暂时注释掉try / catch块,您将收到更详细的错误消息,这可能会证明是这种情况。
当您完成数据库连接后,我会执行以下操作:
它非常简单且更安全,但首先要解决您的数据库连接问题。