У меня есть объект под названием entry
. Я хочу получить доступ к базе данных MySQL
и вытащить соответствующую информацию для записи объекта. Это мои страницы:foreach Loop не работает с объектом
objects.php
class main {
function setValues($rs = array()){
foreach($rs as $key => $val){
$this->$key = $val ;
}
}
var $created ;
var $updated ;
}
class entry extends main {
var $id ;
var $channel ;
var $title ;
var $content ;
}
$table_names['entry'] = 'archive' ;
functions.php
$dbconn = mysqli_connect(DB_HOST , DB_USER , DB_PASS , DB_NAME) ;
$table_names = array() ;
function getTableValues($object){
global $table_names ;
$table_name = $table_names[ get_class($object) ] ;
$r = 'SELECT * FROM '.$table_name ;
return $r ;
}
function query($q){
global $dbconn ;
$stmt = mysqli_query($dbconn , $q) ;
return $stmt ;
}
function fetchRow($stmt){
return mysqli_fetch_array($stmt , MYSQLI_ASSOC) ;
}
function find($object , $other = '' , $orderBy = ''){
global $dbconn ;
$list = array() ;
$q = getTableValues($object) ;
$q .= $other.' '.$orderBy ;
$stmt = query($q) ;
$objectClass = get_class($object) ;
while($rv = fetchRow($stmt)){
$obj = new $objectClass() ;
$obj->setValues($rv) ;
$list = $obj ;
}
return $list ;
}
Затем на фактической странице у меня есть
<?php
require_once('../lib/functions.php') ;
require_once('../lib/objects.php') ;
$entries = find(new entry()) ;
?>
<?php
foreach($entries as $entry){
?>
<tr>
<td><?php echo $entry->id ?></td>
<td><?php echo $entry->channel ?></td>
<td><?php echo $entry->title ?></td>
<td><a href='' class='button'>Edit</a> <a href='' class='button'>View</a></td>
</tr>
<?php
}
?>
Я заканчиваю до получения ошибки :
Trying to get property of a non-object
в результате цикла foreach
и перебирает это восемь раз, даже если прямо сейчас есть только одна запись для целей тестирования. Используя петлю foreach
только $entries
, она правильно вытащила информацию, но, опять же, повторила восемь раз. Я уверен, что это связано с тем, что в таблице SQL имеется восемь столбцов, но я не знаю, почему это будет сделано.
Я также использовал использованное эхо, чтобы убедиться, что операторы SQL верны, использовали count, чтобы убедиться, что в массивах есть только один элемент, который был результатом выполненных функций (был), и использовал print_r()
для распечатки информация, хранящаяся в $entries
(все было правильно). Итак, мне кажется, что причина, по которой это не работает, связана с циклом foreach
. Но я не знаю, почему это и как это исправить.
Любая помощь приветствуется. Спасибо!
'$ table_names' является глобальной переменной? –