Php PDO类不工作-调用成员函数prepare
我有一个关于我的PDO课程的问题。它不工作,并创建了此错误:“注意:未定义变量:第21行classes.php中的db致命错误:在第32行classes.php中的非对象上调用成员函数prepare()。我试图修复此代码几个小时,但没有发现错误。非常感谢您的帮助 先谢谢你Php PDO类不工作-调用成员函数prepare,php,pdo,Php,Pdo,我有一个关于我的PDO课程的问题。它不工作,并创建了此错误:“注意:未定义变量:第21行classes.php中的db致命错误:在第32行classes.php中的非对象上调用成员函数prepare()。我试图修复此代码几个小时,但没有发现错误。非常感谢您的帮助 先谢谢你 <? // classes.php class Connection{ public static $db; function __construct() { try {
<?
// classes.php
class Connection{
public static $db;
function __construct()
{
try {
$this->$db = new PDO('mysql:host=localhost;dbname=vnm', '--', '--', array(PDO::ATTR_PERSISTENT => true));
$this->$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
}
public function GetAccess()
{
return $db;
}
}
class Page
{
public function show_page($s_p1)
{
$db = Connection::GetAccess();
$id = "1";
$stmt = $db->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute();
while($row = $stmt->fetch())
{
print_r($row);
}
}
}?>
必须使用
静态::
访问静态成员。当您应该使用静态::$db
时,您直接访问代码中的$db
,并且错误地使用了$this->db
。您还需要将GetAccess
声明为公共静态函数
另外,调用Connection::GetAccess
实际上并不会实例化该类,因此static::$db
可能会为空,除非您在其他地方创建单例实例
你可以在这里阅读更多关于单例的内容:试试这个。我删除了所有静态方法
<?
// classes.php
class Connection{
public $db;
function __construct()
{
try {
$this->$db = new PDO('mysql:host=localhost;dbname=vnm', '--', '--', array(PDO::ATTR_PERSISTENT => true));
$this->$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
}
public function GetAccess()
{
return $this->$db;
}
}
class Page
{
public function show_page($s_p1)
{
$con = new Connection();
$db = $con->GetAccess();
$id = "1";
$stmt = $db->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute();
while($row = $stmt->fetch())
{
print_r($row);
}
}
}?>
谢谢您的回答。您的提示对我没有帮助,它仍然导致了这个错误。似乎在编写这样的代码之前,我必须获得更多的理论知识。