Mysqli查询不能工作两次
问题描述:
我无法让我的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();
但没有运气。也许我没有正确使用它?我浏览了很多问题,发现了类似的问题,但我都试过了,但都无济于事。我是编程新手,所以我可能会忽略一些基本的东西。谢谢大家的帮助!
答
你这样做是错误的方式。
从不混合您的数据处理代码与演示文稿代码。
首先做一个函数来获取帖子:
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
答
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);
}
+1使用'mysqli_'。是的,这是多么令人兴奋! – Kermit
你是怎么使用'mysqli_data_seek()'?因为这应该使你可以再次使用相同的查询来达到不同的目的 –
不要两次写代码 - require_once'database.inc.php'; $ mysqli = mysqli_connect($ host,$ username,$ password,$ database);' 只写一个顶部并在像全局值这样的函数中使用'$ mysqli'。 –