我尝试构建一个类似Laravel的查询构建器,但是我遇到了问题。
致命错误:在第31行的C:\ xampp \ htdocs \ tutorial \ public \ classes \ DB.php中的非对象上调用成员函数fetch()
class DB {
private $_pdo,
$_query,
$_results = array(),
$_count = 0;
public static $instance;
public static function getInstance(){
if(!isset(self::$instance)){
self::$instance = new DB();
}
return self::$instance;
}
public function __construct(){
try {
$this->_pdo = new PDO('mysql:host=localhost;dbname=query', 'root', '');
$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
public function query($sql){
if($this->_pdo = $this->_pdo->query($sql)){
while($row = $this->_query->fetch(PDO::FETCH_OBJ)){
$this->_results[] = $row;
}
}
return $this;
}
public function results(){
return $this->_results;
}
}
答案 0 :(得分:3)
变化:
if($this->_pdo = $this->_pdo->query($sql)){
要:
if($this->_query = $this->_pdo->query($sql)){
修改强>
如果您的$_query
被称为$_resource
,那么情况会更好。
编辑2:
对于未来 - 您应该检查您在query
方法中实际查询的SQL类型 - 如果UPDATE...
它返回/设置在您的对象{{1}中某处,那么它可能会更好并且对于affected rows
,它会返回/设置INSERT...
?
这会使它变得更加灵活 - 只是一个建议:)
编辑3:
确保您的$ sql是安全/注入证明 - 对于PDO使用预准备语句:
答案 1 :(得分:0)
$this->_query
。您将$this->_pdo
分配给查询结果而不是查询变量。