提供空对象的PHP类
My index.php页面有一段代码,用户默认使用主页。提供空对象的PHP类,php,mysql,Php,Mysql,My index.php页面有一段代码,用户默认使用主页。 <?php require_once ( "config.php" ); $action = isset( $_GET['action'] ) ? $_GET['action'] : ""; switch ( $action ) { case 'seeAll': seeAll(); break; case 'viewResource': viewResource(); break; d
<?php
require_once ( "config.php" );
$action = isset( $_GET['action'] ) ? $_GET['action'] : "";
switch ( $action ) {
case 'seeAll':
seeAll();
break;
case 'viewResource':
viewResource();
break;
default:
homepage();
}
function homepage() {
$results = array();
$learnData = Resource::getHomePageTiles( 'learn' );
$practiceData = Resource::getHomePageTiles( 'practice' );
$elseData = Resource::getHomePageTiles( 'else' );
$results['learn'] = $learnData;
$results['practice'] = $practiceData;
$results['else'] = $elseData;
$results['pageTitle'] = "Couch To Code";
require_once ( "templates/homepage.php" );
}
class Resource {
public $id = null;
public $title = null;
public $summary= null;
public $url = null;
public $content = null;
public $category = null;
public $is_free = null; //????
public $is_featured = null;
public $is_favorite = null;
public $date_created = null;
public function __construct( $data ) {
if ( isset ( $data['id'] ) ) $this->id = (int) $data['id'];
if ( isset ( $data['title'] ) ) $this->title = $data['title'];
if ( isset ( $data['summary'] ) ) $this->summary = $data['summary'];
if ( isset ( $data['url'] ) ) $this->url = $data['url'];
if ( isset ( $data['content'] ) ) $this->content = $data['content'];
if ( isset ( $data['category'] ) ) $this->category = $data['category'];
if ( isset ( $data['is_free'] ) ) $this->is_free = (int) $data['is_free'];
if ( isset ( $data['is_featured'] ) ) $this->is_featured = (int) $data['is_featured'];
if ( isset ( $data['is_favorite'] ) ) $this->is_favorite = (int) $data['is_favorite'];
if ( isset ( $data['date_created'] ) ) $this->date_created = date("Y-m-d H:i:s");
}
public static function getHomePageTiles( $type ) {
global $DB_HOST;
global $DB_NAME;
global $DB_USERNAME;
global $DB_PASSWORD;
$conn = new mysqli( $DB_HOST, $DB_USERNAME, $DB_PASSWORD, $DB_NAME );
if (mysqli_connect_errno()) {
printf("Connection to the database failed: %s/n", $mysqli -> connect_error);
exit();
}
$sql = "SELECT * FROM resources WHERE category = ? ORDER BY position ASC LIMIT 4;";
if ($st = $conn->prepare( $sql )) {
$st->bind_param( "s", $type );
$st->execute();
$list = array();
while ( $row = $st->fetch() ) {
$resource = new Resource( $row );
$list[] = $resource;
}
$conn = null;
return $list;
} else {
printf("Errormessage: %s\n", $conn->error);
}
}
My Homepage.php文件中包含以下代码
<?php
foreach ( $results['learn'] as $learnTile ) {
print_r($learnTile);
?>
<div class="col-md-3 col-xs-6 featured">
<a href=".?action=viewResource&resourceId= <?php echo($learnTile->id)?> ">
<img src="#" class="thumbnail img-responsive">
</a>
</div>
<?php } ?>
我哪里做错了?我的构造函数不工作了吗?显然,资源对象正在将原始属性定义中的null值拉到null。
这件事我已经被难倒好几天了,所以任何帮助/指导都是非常感谢的。谢谢 在
$行中从来没有数组。请参阅手册:php.net/manual/en/mysqli-stmt.fetch.php它只返回布尔值。使用prepare时,应绑定结果。是否从资源类内部创建新资源?“$resource=newresource($row);”在我看来,这似乎是错的。把全局变量去掉。面向对象代码(我的朋友;)您在获取更改之前缺少$st->bind_result(…
),while($row=$st->fetch()){
到while($row=$st->fetch_row()){
。是的,您的问题是stmt fetch返回布尔值谢谢!我在这里找到了解决问题的详细信息:
Resource Object ( [id] => [title] => [summary] => [url] => [content] => [category] => [is_free] => [is_featured] => [is_favorite] => [date_created] => ) Resource Object ( [id] => [title] => [summary] => [url] => [content] ...