1

我想使用 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?

干杯碎纸机

4

3 回答 3

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");
?>
于 2013-02-17T09:08:41.933 回答
-1

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

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

然后在 object/array 中获取结果。

于 2013-02-17T09:09:28.610 回答
-1

如果项目不大,我可以建议尝试RedBean ORM解决方案。要查看它是如何工作的,请转到这里 非常简单,只需在项目中包含 rb.php 文件即可!

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

于 2013-02-17T09:10:30.637 回答