php - 查询以获取同一表中的 2 列

标签 php mysql

我完全被这段代码困住了,希望有人能提供帮助。我有一个数据库,其中有一个名为“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/

相关文章:

php - Highcharts 数据来自 mysql 数据库

php - 应用程序访问服务器负载

Mysql - 访问被拒绝 - 无法触摸程序

MySQL 连接两个表并添加一额外列

php - 从 mysql 迁移到 PDO,不连接到 mysql 服务器

php - Directadmin 更改文件多个域

php - MySQL 时间序列数据库,跟踪数量/价格/数据历史记录 — 仅当新值与前一个值不同时才插入新行?

php - 按 id 对结果进行分组的 MySQL SELECT 语句?

php - 拉维尔 : Use Eloquent Model in API Testing

javascript - 当浏览器自动填充数据时启用按钮