我正在尝试根据我的数据库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);
答案 0 :(得分:1)
$data = qu::getq("22");
第二个并在此代码中出现
function quconn (&$db){
$this->db = &$db;
}
当你从静态内容$中输入函数quconn时,这是不可用的。
改为使用self :: $ db。
对于类qu,遵循类db的相同结构,这是一个单例mnagament类。
我还建议澄清你自己和自我,静态比赛等之间的差异。
Php offiacial文档提供了大量关于
的内容此外,我认为您不需要传递参考方法: 尝试重写quconn函数,如下所示:
function quconn ($db){
self::$db = $db;
}
顺便说一下,我没有把课程改编成“工程” 即使您纠正了传递引用问题,该指令也不起作用:
$stmt = self::quconn()->prepare($sql);
您正在调用quconn调用结果的prepare函数,它不会返回任何内容......
我建议:
$stmt = db::connect()->prepare($sql);
这得到PDP实例并调用prapare方法....