【发布时间】:2014-03-23 04:12:48
【问题描述】:
我有一个数据库包装器和一个获取 PDO 连接实例的静态方法。但是,当我想进行 PDO 查询时,我无法访问它。
这是 DB 类的一部分:
class DB {
private static $_instance = null;
private $_pdo,
$_query,
$_error = false,
$_results,
$_count =0;
private function __construct() {
try {
$this->_pdo = new PDO('mysql:host='.Config::get('mysql/host').';dbname='.Config::get('mysql/db'),Config::get('mysql/username'),Config::get('mysql/password'));
} catch (PDOException $e) {
die($e->getMessage());
}
}
public static function getInstance() {
if(!isset(self::$_instance)) {
self::$_instance = new DB();
}
return self::$_instance;
}
这里是我的查询:
$pdo = DB::getInstance();
$statement = $pdo->prepare("select surname from staff_info where fname = :name");
$statement->execute(array(':name' => Input::get('name')));
$total = $statement->rowCount();
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
echo $row['surname'].'</br>';
}
但是当我运行查询时出现此错误:
致命错误:调用未定义的方法 DB::prepare()
我做错了什么?有什么帮助吗?
但是当我这样做时,它会起作用
$dsn = 'mysql:host=localhost;dbname=cois';
$user = 'root';
$password = '';
$pdo = new PDO($dsn, $user, $password);
$filmName = "omar";
$statement = $pdo->prepare("select surname from staff_info where fname = :name");
$statement->execute(array(':name' => $filmName));
$total = $statement->rowCount();
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
echo $row['surname'].'</br>';
}
这怎么可能?
【问题讨论】:
-
你的 DB 类上的
prepare方法在哪里? -
@chumkiu 可能缺席。因为这就是错误的意思。
-
您在 $this->db 变量上分配 pdo 对象并将 $_instance 静态变量作为 db 对象返回,显然您的 $_instance 为空
-
准备不是 PDO 方法??我知道它是 PDO 方法,这就是我没有定义它的原因。我在没有定义的地方使用它并且它有效。查看我的编辑
-
prepare是一种 PDO 方法。但是您的$db不是 PDO 实例。