【问题标题】:Inner join doesn't work with PDO and fetch assoc内部联接不适用于 PDO 和 fetch assoc
【发布时间】:2015-02-12 15:36:50
【问题描述】:

对于我的新闻和评论系统,我无法从 2 个表(tbl_news 和 tbl_cmets)中获取查询结果。在我用 mysqli 制作的另一个程序中,内部连接有效,但现在使用 PDO 我无法让它工作。

这是我的代码:

$newsQuery = $db->prepare("SELECT * 
                           FROM tbl_news 
                           INNER JOIN tbl_comments ON tbl_news.news_id = tbl_comments.news_id
                           ORDER BY news_id DESC 
                           LIMIT 5");

$newsQuery -> execute();

while($newsFetch = $newsQuery->fetch(PDO::FETCH_OBJ)) {

echo "<div class='news-post'><h3 class='post-title'>" . $newsFetch->title . "</h3>
        <p style='float:left'>By: <span class='post-author'>" . $newsFetch->author . "</span></p>
        <p style='float:right'>Date: <span class='post-date' style='font-style:italic;'>" . $newsFetch->date . "</span></p>
        <br><p>" . $newsFetch->text . "</p></div>";
        if(isset($_SESSION['user']) && ($newsFetch->comments == '1')) {
            echo "Comments(";
            echo "<div id='commentClick'>Click <a href='#' id='openForm'>here</a> to post a comment</div>";
            echo "<form class='navbar-form' id='commentForm'><input style='margin-right:5px' type='text' size='80%' name='commentText' placeholder='Type your comment here'><input type='submit' class='btn btn-primary btn-xs' value='Send'></form>";
        }elseif(!isset($_SESSION['user']) && ($newsFetch->comments == '1')) {
            echo "Click here to view comments. If you want to post comments please login first";
        }else{
            echo "Comments are disabled for this news item";
        }
}

在数据库中,我有以下值: 在 tbl_news 中有一个 news_id,在 tbl_cmets 中有 comment_id、news_id 和 user_id。

提前致谢!

【问题讨论】:

  • 比说它不起作用更具体。它和我回答你有错误一样有帮助。
  • 这是错误:[14-Dec-2014 06:07:27 America/New_York] PHP 致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[23000]:完整性约束违规:1052 /home/mikeoerl/public_html/index.php:32 中的 order 子句中的列 'news_id' 不明确' 堆栈跟踪:#0 /home/mikeoerl/public_html/index.php(32): PDOStatement->execute() #1 {main} 在第 32 行的 /home/mikeoerl/public_html/index.php 中抛出
  • 查询只使用“SELECT * FROM tbl_news”。但我还需要在同一个 fetch_obj 中添加 cmets
  • 您在两个表中都有一个同名的列,您需要在该列之前指定表名。将相关列的select *替换为SELECT col1,col2,tbl_news.news_id,tbl_comments.news_id,...
  • 我当时不是那样做的吗? tbl_news.news_id = tbl_cmets.news_id

标签: php pdo


【解决方案1】:

你的内连接查询应该是这样的

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

我的意思是你需要指定 tablename.columnname 而不是使用 all (*)

编辑

  1052 Column 'news_id' in order clause is ambiguous' 

当您在一个语句中连接 2 个或多个表并且这些表中有同名的列并且您在引用语句中的列时没有在列名前加上表名时,会发生此错误。

【讨论】:

  • 使用他的实际查询中的表格对您来说会这么难吗?
  • 我想访问 tbl_news 和 tbl_cmets 表中的所有行
【解决方案2】:

您需要为数据库表名使用别名,例如:

SELECT n.*, c.* FROM tbl_news n 
INNER JOIN tbl_comments c ON n.news_id = c.news_id 
ORDER BY n.news_id DESC LIMIT 5

【讨论】:

  • 他不需要SELECT 子句中的前缀,因为他想要两个表中的列。
猜你喜欢
  • 2016-07-23
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
相关资源
最近更新 更多