【发布时间】:2013-07-30 11:24:35
【问题描述】:
我是 PDO 的新手。我看了几个视频。我想像以前一样使用我自己的数据库类。我想使用 PDO 而不是 mysql* 函数。我知道 mysql* 函数在 PHP 5.5 中已被弃用
我没有处理我的旧数据库类。因为新手会更难。现在我只创建一个连接。我想选择我的产品。
这是我的代码:
class Database extends PDO {
private $_server = "localhost";
private $_user = "root";
private $_password = "";
private $_db = "demo";
private $_engine = 'mysql';
private $link = NULL;
public function __construct() {
$dsn = $this->_engine.':dbname='.$this->_db.';host='.$this->_server.';charset=utf8';
try {
$this->link = new PDO($dsn, $this->_user, $this->_password);
$this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
}
}
header('Content-Type: text/html; charset=utf-8');
$DB = new Database();
$sql = "SELECT * FROM product";
$q = $DB->query($sql);
while($r = $q->fetch(Database::FETCH_ASSOC)){
$products[] = $r;
}
echo "<pre>";
print_r($products);
echo "</pre>";
我无法获取我的产品。我收到错误消息。
警告:PDO::query(): SQLSTATE[00000]: 无错误:在 /var/www/dt/includes/class/class.database.php 中未调用 PDO 构造函数 第 52 行
致命错误:在非对象上调用成员函数 fetch() /var/www/dt/includes/class/class.database.php 第 53 行
我的错误是什么?我该怎么办?
【问题讨论】:
-
删除
or die("Failed!")PDO然后会抛出异常(因此PDO::ERRMODE_EXCEPTION)。使用此结果更新您的问题。 -
我认为你不需要上课来使用 PDO,除非这是为了学习。
-
您的类扩展了
PDO,并且还在构造函数中实例化了一个新的 PDO 实例。这个新实例实际上并未设置为您创建的数据库对象中的属性。本质上,您的 Database 类实际上并没有创建到数据库的连接。使用parent::__construct($dsn, $this->user, $this->password);而不是创建新的 PDO 实例。 -
亲爱的@AlexP,我更新了我的问题。现在我收到内部服务器错误 500。
-
A 500 Internal Server Error 意味着您的脚本正在抛出错误,但您尚未配置 PHP 以显示错误消息。这是您在更进一步之前需要解决的问题;没有错误消息的帮助是不可能编码的。这是brief explanation。