我想使用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中?
干杯 切碎机
答案 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)
答案 2 :(得分:-1)
如果项目不是很大,我可以建议尝试 RedBean ORM 解决方案。要查看其工作原理,请here 非常简单,除了在项目中包含rb.php文件之外别无其他!
顺便说一句,如果您仍想手动使用mysqli,解决方案是在查询中使用id&gt; = 1和id&lt; = 6创建一个新的WHERE,然后使用php引用将结果提取到数组...... mysqli quickstart guide