【问题标题】:Getting information from 3 tables SQL & PHP从 3 个表 SQL 和 PHP 获取信息
【发布时间】:2013-03-18 23:00:21
【问题描述】:

我正在使用 HTML、CSS、PHP 和 MySQl 制作一个类似系统的博客。 该站点由三个表组成。

用户(id、用户名、密码、电子邮件)
帖子(postid、标题、帖子)
cmets(postid、id、comment、commentid)postid 来自帖子,id 来自用户。

我正在尝试显示所有 cmets 以及为某个帖子留下他们的用户名。

当我在 phpmyadmin 中使用此查询时: SELECT user.username, cmets.comment FROM user INNER JOIN cmets on user.id=cmets.id where postid=1

它显示了我需要什么。

当我将它添加到 php 中时,我得到一个空白页。

<?php
//echo "1";
session_start();

$connect = mysql_connect('localhost', 'root', 'root') or die("Couldn't connect");
mysql_select_db("com541blog") or die("Couldn't connect to database");

//echo "2";
//$postid = $_GET['type'];
$_SESSION['postid'] = $postid;

//echo "3";
$query_comments = mysql_query("SELECT user.username as username, comments.comment as comment     FROM user INNER JOIN comments on user.id=comments.id WHERE postid='1'");

$info = mysql_fetch_array($query_comments);

$username = $info['username'];
$comment = $info['comment'];

echo $username;                         
echo $comment;

?>

提前感谢您的帮助:)

【问题讨论】:

  • 听起来您的原始问题现已得到解答(因为您不再获得空白页,而是意外的结果集),您现在正在进入下一步调试您的应用程序。你应该 1. 投票给所有帮助过的人, 2. 接受最终有帮助的解决方案,然后 3. 提出一个新问题,在你的解释中准确。 “例如,在我的数据库中有 3 行的帖子 ID 为 1” - 这三行在哪个 table 中?仔细设计好您的问题,帮助我们帮助您。

标签: php mysql join


【解决方案1】:

您没有执行任何查询。

$rs = mysql_query($query_comments);
$info = mysql_fetch_array($rs);

【讨论】:

  • +1 简洁明了 ;-)。我怎么会看到拼写错误和缺少分号,却又错过了?
【解决方案2】:

我怀疑您的第一行有一个错误,即在“连接”末尾附近缺少“c”。

include("db_connet.php"); 应该是include("db_connect.php");

另外,缺少分号;。这个:

$query_comments = ("SELECT user.username, comments.comment 
                    FROM user INNER JOIN comments on user.id=comments.id 
                    where postid=1")

应阅读:

$query_comments = ("SELECT user.username, comments.comment 
                    FROM user INNER JOIN comments on user.id=comments.id 
                    where postid=1");

此外,用表名(例如user.username)限定每个列名也是不错的做法。但是您可能更喜欢以下使用表别名的更简洁的语法:

$query_comments = ("SELECT u.username, c.comment 
                    FROM user u INNER JOIN comments c on u.id = c.id 
                    where c.postid = 1");

(请注意,表别名不必是单个字母,因此可以方便地将表名(例如“ManufacturerSuppliedPartsListData_Feb01”)简化为“mpl”,而不会失去其含义。或者例如,如果您有您可能会使用“客户”和“信用”而不是“c”,例如“cust”和“cred”)

【讨论】:

  • 感谢您指出 :) 在我的一些页面中是一个错误。仍然有一个空白页:(
  • @Space 所以做一些基本的调试...例如在include 之前添加一个echo "1";。 echo "2"; 在包含之后。现在怎么办?还是空白?注释掉include 然后呢?等等……
  • @Space 还在您的问题中包含您的db_connect 代码的副本(即编辑您的问题,不要将其添加为评论)。你有任何证据证明这个db_connect 文件确实有效吗?
  • 我在 db_connect.php 前后放置了一个回声,在 $query_cmets 之前放置了一个。它们都不起作用,但是当我注释掉 $query_cmets 时,它们都起作用了。是的,db_connect 文件有效,在每个页面上都有它,它们工作正常。
  • @Space 您在$query_comments 行的末尾缺少一个分号。
【解决方案3】:

您需要在 PHP 中指定mysql_query ...否则您的查询将不会被执行

喜欢:

$query_comments = mysql_query("SELECT user.username, comments.comment FROM user INNER JOIN comments on user.id=comments.id where where postid=1");

【讨论】:

  • 添加了它们,但仍然是空白页
  • @DavidLavery 尝试像我在“编辑部分”中所说的那样在 SELECT 查询前面添加 mysql_query ...
  • 已经添加了但还是没有
  • 您是否在连接设置后使用mysql_select_db ( string $database_name ) 语句选择了数据库?
  • 是的,它在 db_connect.php 中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 2015-02-18
相关资源
最近更新 更多