【发布时间】:2015-03-01 22:45:14
【问题描述】:
我想知道在 HTML 文本块中从 MySQLi 代码中回显一行的适当语法是什么。我正在处理一个页面,该页面在开始时使用 PHP 代码来确定会话是否已启动并在从 MySQLi 数据库中提取所述 cmets 后发布用户已发布的 cmets。有趣且令人困惑的部分是,我已经在一个 HTML div 中完成了我想要做的事情,但我似乎无法让它在下一个中工作。
<?php
$page_title = "store";
require_once('connectvars.php');
require_once('startsession.php');
require_once('header.php');
// Connect to the DB
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
// Grab location data from the DB
// Grab post data
$query2 = "SELECT sp.post_id, sp.admin_id, sp.post, sp.date, sa.admin_id, s.store_name, s.store_city, s.store_state, s.store_zip,s.store_phone, s.store_email, s.store_address FROM store_posts sp, store_admin sa, stores s WHERE sp.admin_id='$admin_id' and sa.admin_id='$admin_id' and s.admin_id='$admin_id'ORDER BY date DESC";
$data = mysqli_query($dbc, $query2);
if (mysqli_num_rows($data) == 0) {
$blankwall = "Empty feed? '<a href=manage.php><u>Click here</u></a> to manage posts and communicate with your customers!";
}
?>
<body>
<div id="content">
<!-- BANNER & CONTENT-->
<h2>Recent Posts</h2>
<div id="store_wrap">
<div id="left_col">
<br />
<?php
**// Loop through posts and show them
if (mysqli_num_rows($data) == 0) {
echo $blankwall;
}
else {
while ($row = mysqli_fetch_array($data)) {
// Show the posts
echo '' . $row['post'] . ' | ';
echo date('M j, Y g:i A', strtotime($row['date']));
echo '<br /><hr />';
}**
}
?>
</div><!-- closes left_col -->
所以上面的所有代码都是用来查询数据库以获取正确的数组,然后在 PHP 代码下方的 HTML div 中显示 $row['posts'],标题为 left_col。我正在尝试在下一个 div 中执行完全相同的操作,但不是回显 $row['posts'],而是回显诸如 $row['store_city'] 之类的行,以便在拉动页面后显示商店的位置出先前选择的阵列。这是我那部分的无效代码:
<div id="right_col">
<div id="store_picture">
<img src="images/store.jpg" style="width:325px;"/>
</div><!-- closes picture --><br />
<div id="store_address">
<br /><br /><h2>Location Info</h2>
<?php
if (mysqli_num_rows($data) == 1) {
while ($row = mysqli_fetch_array($data)) {
echo '<p>' . $row['store_city']. '</p>';
}
}
mysqli_close($dbc);
?>
</div><!-- closes store_address -->
<div id="store_info">
<p></p>
</div><!-- closes store_info -->
</div><!-- closes right_col -->
<div class="clear"></div>
</div><!-- closes store_wrap -->
</div><!-- closes content -->
无论出于何种原因,当我第二次尝试从该数组中回显数据时,该 div 中只有空白空间。我没有收到任何错误。我就是不明白……什么。因此,我认为这是一个语法问题。我已经尝试了与 echo $row['post'] 部分完全相同的方法,但它不起作用。
【问题讨论】:
-
您希望对
$data中的同一结果集进行第二次循环?如果是这样,您将需要 1)循环一次并将所有获取的行存储到一个数组中,然后您可以根据需要循环多次,或者 2)将记录指针倒回到结果集的开头mysqli_data_seek($data, 0)php.net/manual/en/mysqli-result.data-seek.php 因为一旦你获取了所有行,下一次调用mysqli_fetch_array()将返回 false。 -
我确实有错误报告,而且我的原始代码没有拼写错误,所以这很奇怪。现在要编辑帖子以解决该问题。关于这个问题,我明白你在说什么。我不知道 mysqli_fetch_array() 在被调用一次后会返回 false。这很可能是我的问题。一旦我弄清楚它应该如何实现,我将尝试使用数据搜索功能,并回复结果。谢谢!
-
最简单的解决方法是在第二次调用
while ($row = mysqli_fetch_array($data))之前立即调用mysqli_data_seek($data, 0);这不是最有效的方法,因为它需要 MySQL 提供两次行,但它是最简单的让您的代码工作的路径。 -
我现在会尝试并报告结果。有没有更好的方法来完成我在这里尝试的事情?我是 PHP 和 MySQLi 的新手(显然),我有点担心对数据库进行多次调用可能会出现问题。出于这个原因,我没有尝试在每个 PHP 块中简单地运行另一个查询。我认为这将是非常低效的,只是感觉......错了。
-
绝对不要查询两次。如果您只返回少量行(例如,