我正在尝试基于我的数据库 PDO 类创建一个简单的类,我可以说“获取此 id”,它将打印信息。我试图在“qu”中执行此操作,但出现以下错误:“调用未定义的方法 qu::get()”。
可能存在多种问题,因此这里的任何帮助都会很棒。非常感谢!!
class db {
protected static $conn;
private function __construct(){}
public static function connect() {
if (!isset(self::$conn)) {
self::$conn = new PDO('mysql:host=localhost;dbname=database', DB_USER, DB_PASSWORD);
}
return self::$conn;
}
}
class qu {
private $db;
function quconn (&$db){
$this->db = &$db;
}
private static function getq($id){
$sql="SELECT * FROM table WHERE id=:id";
$stmt = self::quconn()->prepare($sql);
$stmt->execute(array(':id'=> $id));
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
}
//$data = db::connect()->query("SELECT * FROM table")->fetchAll(); // this works
$data = qu::getq("22"); //can i use something like this? this causes the error
print_r($data);
最佳答案
类 qu 的函数 getq 应该使用 public 访问修饰符进行标记。 否则下一行将失败,因为 getq 是私有(private)函数
$data = qu::getq("22");
此代码中的第二个问题
function quconn (&$db){
$this->db = &$db;
}
当您从静态内容输入函数 quconn 时,$this 不可用。
使用 self::$db 代替。
对于 qu 类,遵循与 db 类相同的结构,它是一个单例管理类。
我还建议您澄清 $this 和 self、静态竞赛等之间的差异。
Php 官方文档提供了很多有关
此外,我认为您不需要传递引用方法: 尝试重写 quconn 函数如下:
function quconn ($db){
self::$db = $db;
}
顺便说一句,我不认为 qu 类是精心“设计”的 即使您纠正了按引用传递问题,此指令也不起作用:
$stmt = self::quconn()->prepare($sql);
您正在对 quconn 调用的结果调用准备函数,该函数不会返回任何内容...
我建议:
$stmt = db::connect()->prepare($sql);
这获取 PDP 实例并调用 prapare 方法....
关于php - PDO 类范围调用未定义的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9734029/