【发布时间】:2013-07-20 19:33:59
【问题描述】:
我不明白我的错误,因为我确定有一个对象。请看下面的 print_r:
注意:尝试在第 21 行获取 C:\xampp\htdocs\travel_mvc\cockpit\index.php 中非对象的属性
第 21 行和有:
echo $row->tz_name.'<br>';
我的 print_r:
Array
(
[0] => stdClass Object
(
[tz_name] => Africa/Abidjan
)
[1] => stdClass Object
(
[tz_name] => Africa/Accra
)
[2] => stdClass Object
(
[tz_name] => Africa/Addis_Ababa
)
[3] => stdClass Object
(
[tz_name] => Africa/Algiers
)
[4] => stdClass Object
(
[tz_name] => Africa/Asmara
)
)
在我的课上我有:
class model{
private $fields = '*';
private $table = '';
private $where = '';
private $and = '';
private $limit = '';
private $order = '';
private $type_order = 'DESC';
private $d = array();
public function find($data = array()){
if(isset($data['fields'])){
$this->fields = $data['fields'];
}
$this->table = $data['table'];
if(isset($data['where'])){
$this->where = ' WHERE '.$data['where'];
}
if(isset($data['and'])){
$this->and = ' WHERE '.$data['and'];
}
if(isset($data['limit'])){
$this->limit = ' LIMIT '.$data['limit'];
}
if(isset($data['order'])){
$this->order = ' ORDER BY '.$data['order'].$type_order;
}
$query = Db::getInstance()->prepare('SELECT '.$this->fields.'
FROM '.$this->table.$this->where.
$this->and.$this->order.$this->limit.'');
$query->execute();
while($data = $query->fetchAll(PDO::FETCH_OBJ)){
$d[] = $data;
}
return($d);
}
}
当我调用我的函数时:
$model = new model();
$sql = $model->find(array(
'fields'=>'tz_name',
'table'=>'times_zones',
'limit'=>5
));
foreach($sql as $row):
echo $row->tz_name.'<br>';
endforeach;
echo '<pre>';
print_r($row);
echo '</pre>';
【问题讨论】:
-
您的 print_r() 转储清楚地表明您没有对象:您有一个数组。
-
echo $row['tz_name']? -
不是这个问题的一部分,但如果您在
$data数组中使用where和and条目,您的查询中将有一个双WHERE。还有许多可用的库可以实现查询构建器 API。我建议使用其中之一,而不是自己编写。 -
谢谢菲尔。你有查询生成器 api 的地址吗?我找到了一些但从未完成...谢谢
-
Doctrine DBAL 项目非常成熟。不过,您不需要使用完整的 ORM