【发布时间】:2014-10-26 04:17:23
【问题描述】:
我有一个名为entry 的对象。我想访问MySQL 数据库并提取对象条目的相关信息。这些是我的页面:
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 循环的结果,它迭代了八次,即使现在只有一个条目用于测试目的。使用只有$entries 的foreach 循环,它正确地提取了信息,但又重复了八次。我很确定这是因为 SQL 表中有八列,但我不知道为什么会这样。
我还使用 echo 确保 SQL 语句正确,使用 count 确保数组中只有一项是执行函数的结果(有),并使用 print_r() 打印输出存储在$entries 中的信息(都是正确的)。所以,在我看来,这不起作用的原因是foreach 循环。但我不知道这是为什么或如何解决它。
我们不胜感激。谢谢!
【问题讨论】:
-
$table_names是全局变量吗?