我完全停留在这段代码上,并希望有人能提供帮助。我有一个数据库,其中有一个名为“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,boolean给出......“
<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>
答案 0 :(得分:4)
这会让你心痛:
$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
实际上是一个数字,否则需要用引号括起数据。
最后,这可能不言而喻,但你真的需要在这里使用预备语句。
答案 1 :(得分:1)
检查您是否已连接正确的数据库,并且您的查询在语法上是正确的
如果$main_pages = mysqli_query($conn, $query);
未正确设置或查询语法错误, $conn
将返回布尔值。
因此当你发射mysqli_fetch_assoc($main_pages)
时它会抛出
“警告:mysqli_fetch_assoc()期望参数1为mysqli_result,boolean在......中给出”
as,$main_pages
是布尔值。
答案 2 :(得分:0)
我认为这与您的第二个查询有关,您可能将其格式化错误...我不是专家,但如果我错了可能别人可以编辑。
由此:
$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = {$mainpage["file_name"]}";
对此:
$mainfilename = $mainpage['file_name'];
$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = $mainfilename";