每当我尝试执行查询时,它会显示:
致命错误:调用未定义的方法connect :: prepare()
Array
(
[nome_gal] => just a name
[cover_gal] => DSC_0017.JPG
[galleria] => Array
(
[0] => Array
(
[id_foto] => 24
[nome_foto] => foto_9.jpg
)
)
)
//这是另一个页面中的require_once' connect.php';
class connect {
private static $instance = null;
private $pdo;
private function __construct() {
try{
$this->pdo = new PDO('mysql:localhost=127.0.0.1;dbname=comment', 'root', '');
} catch(PDOException $e) {
die($e->getMessage());
}
}
public static function getInstance() {
if(!isset(self::$instance)) {
self::$instance = new connect();
}
return self::$instance;
}
}
答案 0 :(得分:0)
您需要$this->pdo->pdo->prepare($sql);
,目前无法访问该$pdo
,因为connect
目前在您的班级$this->pdo
中是私密的。
connect
指的是您的第一个(似乎是数据库类$this->pdo
),然后您再次将connect
指定为您实际的PDO数据库类&#39 ;尝试访问(将此添加到您的public function __call($method, $args)
{
if ( method_exists($this->pdo, $method) )
{
return call_user_func_array(array($this-pdo, $method), $args);
}
}
课程。)
您可以使用魔术方法__call
将这些请求转发到父PDO类:
function TakeValue()
{
var xs = document.getElementById("text").value;
var p = document.getElementById("para");
p.textContent = String(xs);
// Do you want to add a p or change the text
// document.body.appendChild(p);
return false;
}
答案 1 :(得分:0)
在连接中,您在$pdo
属性中拥有PDO。在用户中,您已在$pdo
属性中进行连接。要从用户访问PDO,您需要使用$this->pdo->pdo
。这就是命名会让你感到困惑的地方。
如果你只使用这个类来维护一个PDO实例(单例模式),那么没有理由在这里使用魔术函数,只需返回getInstance()中的PDO对象而不是连接实例:
/**
* @return PDO
*/
public static function getInstance() {
if(!isset(self::$instance)) {
self::$instance = new connect();
}
return self::$instance->pdo;
}
答案 2 :(得分:0)
您必须了解面向对象编程中的封装。将变量声明为私有时,无法在类外部解析。让我说你宣布
private $pdo
您无法在User类中看到该变量仅在连接类中可见。 在你的用户类中,你已经将$ pdo连接到实例(单例实例),但是当你在用户类中使用$ pdo时,你试图访问本机pdo而不是。 所以请使用getter / setter作为私有变量。在您的连接类中:
function getPDO(){
return $this->pdo;
}
// You dont need setter because you may will not use another driver in lifecyle
因此,当您想要调用数据库驱动程序时,毫无疑问地使用此快捷方式
connect::getInstance()->getPDO();
请不要犹豫,在评论中提出任何问题。希望帮助!!!