试图像Wordpress循环一样创建自己的循环

时间:2012-10-29 14:15:22

标签: php mysql wordpress while-loop

我最近阅读了这篇文章:How to make my own while Loop just like Wordpress Loop?我正试图自己制作循环,但到目前为止没有任何成功。

本文给出的答案建议使用OOP方法而不是使用全局变量。

我对OOP方法没有好运,但全局变量方法几乎可以正常工作。

不显示MySQL表中的'item_title'和'item_desc'值,而是显示字母。请注意,字母采用正确的while循环格式。

我做错了什么?

非常感谢

<?php
//CONNECT TO DATABASE
$mysqli = mysqli_connect("localhost", "username", "password", "testDB");

//VALIDATE ITEMS FROM STORE_ITEMS TABLE
$get_item_sql = "SELECT * FROM store_items";
$get_item_res = mysqli_query($mysqli, $get_item_sql) or die(mysqli_error($mysqli));

//DEFINE VARIABLES
$posts = mysqli_fetch_array($get_item_res);
$post = null;
$post_count = 0;
$post_index = 0;

//HAVE_POST FUNCTION
function have_post() {
global $posts, $post_count, $post_index;

if ($posts && ($post_index <= $post_count)){
    $post_count = count($posts);
    return true;
}
else {
    $post_count = 0;
    return false;
}
}

//THE_POST FUNCTION
function the_post() {
global $posts, $post, $post_count, $post_index;

// make sure all the posts haven't already been looped through
if ($post_index > $post_count) {
    return false;
}

// retrieve the post data for the current index
$post = $posts[$post_index+1];

// increment the index for the next time this method is called
$post_index++;
return $post;

}

//THE_TITLE FUNCTION
function the_title() {
global $post;
return $post['item_title'];
}

//THE_CONTENT FUNCTION
function the_content() {
global $post;
return $post['item_desc'];
}

//OUTPUT
if(have_post()) : while(have_post()) : the_post();
echo '<h2>'.the_title().'</h2>';
echo '<p>'.the_content().'</p>';
endwhile; endif;

?>

2 个答案:

答案 0 :(得分:1)

你做错了MySQL。 mysqli_fetch_array获取单个ROW数据。它不会检索查询结果中的所有行。您的查询效率也很低。如果您只想计算有多少帖子,您可以

$result = mysqli_query("SELECT * FROM ...");
$rows = mysqli_num_rows($result);

但效率低下 - 您假设您实际上正在使用它,强制数据库库开始获取行数据。然而,你只是把它扔掉了。更好的方法是

$result = mysqli_query("SELECT count(*) AS cnt FROM ...") or die(mysqli_error());
$row = mysqli_fetch_assoc($result);
$rows = $row['cnt'];

稍后您将$posts视为包含所有查询结果,但由于它只包含该一行,您只需迭代/获取该行的字段即可。

答案 1 :(得分:0)

我可以看到你只是使用

查询一行

$posts = mysqli_fetch_array($get_item_res);

你需要用这样的方式用一行来填充一个数组。

$posts = array();
while ($row  = mysqli_fetch_array($get_item_res) ){
    $posts[] = $row;
}