我完全被这段代码困住了,希望有人能提供帮助。我有一个数据库,其中有一个名为“pages”的表,它有 5 列:id、file_name、link_name、category、main_cat。不确定这是否重要,但 main_cat 的类型为 tinytext,file_name 为 varchar。
id | file_name | link_name | category | main_cat
1 | books | Books | books | 1
2 | fiction | Fiction | books | 2
3 | non-fiction | Non-Fiction | books | 2
4 | music | Music | music | 1
5 | alternative | Alternative | music | 2
6 | country | Country | music | 2
在我的导航菜单(下面的代码)中,我想列出所有 main_cat(1),然后是子页面,man_cat(2) 显示在下面。这是我现在拥有的代码,我已经尝试了很多不同的方法,包括内部连接和左连接,但无论如何,我不断收到一条错误消息“警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result, bool 值给予……”
<ul>
<?php
$query = "SELECT * FROM pages WHERE main_cat = 1 ORDER BY link_name ASC ";
$main_pages = mysqli_query($conn, $query);
confirm_query($main_pages);
?>
<?php
while($mainpage = mysqli_fetch_assoc($main_pages)) {
?>
<li><a href="/edit.php?<?php echo $mainpage["id"]; ?>"><?php echo $mainpage["link_name"]; ?></a>
<?php
$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = {$mainpage["file_name"]}";
$sub_pages = mysqli_query($conn, $query);
confirm_query($sub_pages);
?>
<ul>
<?php
while($subpage = mysqli_fetch_assoc($sub_pages)) {
?>
<li><a href="/edit.php?<?php echo $subpage["id"]; ?>"><?php echo $subpage["link_name"]; ?></a></li>
<?php
}
?>
<?php mysqli_free_result($sub_pages); ?>
</ul>
</li>
<?php
}
?>
<?php mysqli_free_result($main_pages); ?>
</ul>
最佳答案
这会让你胃灼热:
$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = {$mainpage["file_name"]}";
问题是 file_name
周围的 "
字符被解释为结束字符串,PHP 的行为不可预测。换句话说,PHP 看到了这个:
$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = {$mainpage["file_name"]}";
// ^ start string ^ end ^s ^end again
改为尝试以下选项之一:
$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = '{$mainpage['file_name']}'";
$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = '".$mainpage["file_name"]."'";
另外,请注意变量周围的引号——除非 file_name
实际上是一个数字,否则您需要用引号将数据括起来。
最后,这可能是不言而喻的,但您确实需要在这里使用准备好的语句。
关于php - 查询以获取同一表中的 2 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20559309/