2013-02-02 51 views
2

我无法让我的Mysqli查询同时工作。如果我在我的html中注释掉一个函数,那么另一个函数会正确执行,反之亦然。Mysqli查询不能工作两次

function all_posts() { 
    require_once 'database.inc.php'; 
    $mysqli = mysqli_connect($host, $username, $password, $database); 
    $query = mysqli_query($mysqli, "SELECT variable_name, post_name, post_date, post_display FROM blog_posts ORDER BY id DESC LIMIT 5"); 

    if (!$query) 
     echo mysqli_error(); 

    while ($results = mysqli_fetch_assoc($query)) { 

     $post_name = $results['post_name']; 
     $post_date = $results['post_date']; 
     $post_display = $results['post_display']; 
     $variable_name = $results['variable_name']; 

     echo "<a href='posts.php?post={$variable_name}'>"; 
     echo "<div class='entry'>"; 
     echo "<div class='entry_header'>"; 
     echo "<h2>{$post_name}</h2>"; 
     echo "<h3>{$post_date}</h3>"; 
     echo "</div>"; 
     echo "<p>{$post_display}</p>"; 
     echo "</div>"; 
     echo "</a>"; 
    } 

    mysqli_free_result(); 
} 

function all_sidebar_posts() { 

    require_once 'database.inc.php'; 
    $mysqli = mysqli_connect($host, $username, $password, $database); 
    $query = mysqli_query($mysqli, "SELECT variable_name, post_name FROM blog_posts ORDER BY id DESC LIMIT 5"); 

    while ($results = mysqli_fetch_assoc($query)) { 

     $post_name = $results['post_name']; 
     $variable_name = $results['variable_name']; 
     echo "<li><a href='posts.php?post=$variable_name'>$post_name</a></li>"; 
    } 

    mysqli_free_result(); 
} 

这是我输出到的html。

<ul> 
    <?php all_sidebar_posts(); ?> 
</ul> 
</div> 
<div class="content_container"> 
    <?php all_posts(); ?> 
</div> 

我试过使用mysqli_data_seek();但没有运气。也许我没有正确使用它?我浏览了很多问题,发现了类似的问题,但我都试过了,但都无济于事。我是编程新手,所以我可能会忽略一些基本的东西。谢谢大家的帮助!

+1

+1使用'mysqli_'。是的,这是多么令人兴奋! – Kermit

+0

你是怎么使用'mysqli_data_seek()'?因为这应该使你可以再次使用相同的查询来达到不同的目的 –

+2

不要两次写代码 - require_once'database.inc.php'; $ mysqli = mysqli_connect($ host,$ username,$ password,$ database);' 只写一个顶部并在像全局值这样的函数中使用'$ mysqli'。 –

回答

5

你这样做是错误的方式。
从不混合您的数据处理代码与演示文稿代码。

首先做一个函数来获取帖子:

function get_posts() { 
    global $mysqli; 
    $sql = "SELECT variable_name, post_name, post_date, post_display 
      FROM blog_posts ORDER BY id DESC LIMIT 5" 
    $result = mysqli_query($mysqli, $sql); 
    if (!$result) trigger_error(mysqli_error()."[$sql]"); 
    $date = array(); 
    while ($row = mysqli_fetch_assoc($result)) { 
     $data[] = $row; 
    } 
} 

这样调用它

require_once 'database.inc.php'; 
$mysqli = mysqli_connect($host, $username, $password, $database); 
$data = get_posts(); 

,然后使用这个数组来显示

+0

非常感谢!这整天都在杀我!你让我更近了一步,不是无知的编码人员,不好的做法。 – Brannon

-1

http://www.php.net/manual/en/mysqli-result.data-seek.php

咨询手册data_seek的使用();

拿这个例子:

你的情况
$Query = "SELECT * FROM Users WHERE ID='1'"; 
$TheQuery -> $MySQLi->query($Query); 
$Results = $TheQuery->fetch_array(MYSQLI_ASSOC); 
$TheQuery->data_seek(0); // Lets you re-use the query 

$Count = $TheQuery->num_rows; // Gets the count 

这样:

您应该执行的程序方法:

$query = "SELECT Name, CountryCode FROM City ORDER BY Name"; 

    if ($result = mysqli_query($link, $query)) { 

     /* fetch row */ 
     $row = mysqli_fetch_row($result); 

     printf ("City: %s Countrycode: %s\n", $row[0], $row[1]); 


    mysqli_data_seek($result, 0); 

    $row_cnt = mysqli_num_rows($result); 


     /* free result set*/ 
     mysqli_free_result($result); 

} 
+0

我是不是认为我应该在每个函数的while循环结尾放置'mysqli_data_seek(mysqli_fetch_assoc($ query),0)'? – Brannon

+0

根据'if(!empty($ query))'我在第二个查询中查询本身失败。 – Brannon

+2

小心,如果你释放结果将不再可用,所以它将无法使用'mysqli_data_seek'。 –