mySQLi查询将结果放入数组和不同的DIV中

时间:2013-02-17 09:03:31

标签: php arrays html mysqli

我想使用mySQLi从mySQL数据库查询多个(总共6个,ID 1到6)ID的内容。之后我想把结果(“introtext”)放在不同的DIV中。目前我使用以下代码(完美的工作):

<?php
$q = $db->query("SELECT introtext FROM content WHERE id=1");
$r = $q->fetch_object();
?>
<div id="content1" class="toggle"><?php echo "$r->introtext";?></div>

<?php
$q = $db->query("SELECT introtext FROM content WHERE id=2");
$r = $q->fetch_object();
?>
<div id="content2" class="toggle"><?php echo "$r->introtext";?></div>

<?php
$q = $db->query("SELECT introtext FROM content WHERE id=3");
$r = $q->fetch_object();
?>
<div id="content3" class="toggle"><?php echo "$r->introtext";?></div>

等等......

如何优化此代码以仅查询mySQL一次(将结果放入数组中)并将不同的结果分配到不同的DIV中?

干杯 切碎机

3 个答案:

答案 0 :(得分:0)

好问题
基本上你需要2个循环
一个用数据获取数组:

<?php
$data = array();
$res = $db->query("SELECT id, introtext FROM content ORDER BY id LIMIT 6");
while($row = $res->fetch_assoc()) {
    $data[$row['id']] = $row['introtext'];
}
?>

您可以使用任何SQL来过滤您的查询。 ORDER BY id LIMIT 6对于本案例“获得前6个ID”似乎最方便,因为连续性从未得到保证。

然后显示另一个循环

<? foreach ($data as $id => $introtext): ?>
<div id="content<?=$id?>" class="toggle"><?=htmlspecialchars($introtext?)></div>
<? endforeach ?>

顺便说一句,如果使用不是原始的Mysqli API而是使用一些帮助库,PHP部分将减少到一行:

<?php
$data = $db->getIndCol("id","SELECT id, introtext FROM content ORDER BY id LIMIT 6");
?>

答案 1 :(得分:-1)

为什么不使用IN mysql运算符?

SELECT introtext FROM content WHERE id IN (1,2,3,4,5,6);

然后获取对象/数组中的结果。

答案 2 :(得分:-1)

如果项目不是很大,我可以建议尝试 RedBean ORM 解决方案。要查看其工作原理,请here 非常简单,除了在项目中包含rb.php文件之外别无其他!

顺便说一句,如果您仍想手动使用mysqli,解决方案是在查询中使用id&gt; = 1和id&lt; = 6创建一个新的WHERE,然后使用php引用将结果提取到数组...... mysqli quickstart guide