【问题标题】:Creating a friends list in php/pdo and with three tables在 php/pdo 和三个表中创建一个朋友列表
【发布时间】:2017-05-09 11:49:52
【问题描述】:

就像标题说的那样,尝试使用 mysql 和 pdo 在 php 中创建朋友列表。 得到了三个表,一个用户和一个朋友和一个详细信息

用户: ID 用户名

朋友们: 用户身份 朋友ID 状态

详情: profileImg

foreach($db->query('SELECT * FROM FF_Users 
LEFT JOIN FF_User_Details ON FF_User_Details.user_id = FF_Users.id 
LEFT JOIN FF_UserRoles ON FF_UserRoles.user_id = FF_Users.id
LEFT JOIN FF_ZIP_nb_NO ON FF_ZIP_nb_NO.Postnummer = FF_User_Details.zip
LEFT JOIN FF_User_Settings ON FF_User_Settings.user_id = FF_Users.id
INNER JOIN FF_MyFriends ON ((FF_MyFriends.user_id = FF_Users.id AND FF_Users.id) OR (FF_Users.id = FF_Users.id AND FF_MyFriends.user_id))
GROUP BY FF_Users.id') as $row) {
if ($isFriends) {
    echo '                    <button type="button" class="btn btn-primary btn-xs pull-right read-only">';
echo '                      <i class="fa fa-user"> </i> ' . USERS_ADD_FRIEND;
echo '                    </button>';
} else {
echo '                    <button type="button" class="btn btn-primary pull-right btn-xs read-only disabled">';
echo '                      <i class="fa fa-user"> </i> ' . USERS_IS_FRIEND;
echo '                    </button>';
}
}

我在这里做错了什么?只有一遍又一遍的空白页。

感谢大家的帮助:)

【问题讨论】:

  • 首先,检查你的错误日志,那里可能有有用的线索。接下来,由于我们没有您的完整代码,请尝试对您的$db-&gt;query() 结果执行var_dump:也许查询本身不是问题,但其余代码是。
  • @SolarBear - 并不是说​​我从 var_dump 中理解了它所说的任何内容:object(PDO)#2 (0) { } 以及您丢失的其余代码,只是将数据回显因为它s much html this page wont 让我发布所有内容。但我会将它更新为正确的 db->query,这样你就会看到我正在尝试做什么。认为只是我的帖子是最简单的解释方式:)

标签: php mysql pdo


【解决方案1】:

您对 var_dump 显示 object(PDO)#2 (0) { } 的评论让我相信您的查询根本没有返回任何数据。

我不完全确定这是您的问题,因为我无权访问您的数据,但这条线在我看来很可疑:

INNER JOIN FF_MyFriends ON (
    (FF_MyFriends.user_id = FF_Users.id AND FF_Users.id)
    OR
    (FF_Users.id = FF_Users.id AND FF_MyFriends.user_id)
)
  1. 首先,你的情况看起来很奇怪。
    1. 在第一部分中,您将比较 FF_MyFriends.user_id = FF_Users.id,这看起来不错,然后比较 AND FF_Users.id,这看起来很奇怪。如果您想确保 FF_Users.id 不为 NULL,建议您明确检查 (AND FF_Users.id IS NOT NULL)。
    2. 在第二部分中,您将比较 FF_Users.id = FF_Users.id,根据定义返回 true。 :)
  2. 您在其他每张桌子上都使用LEFT JOIN,但在那个桌子上使用INNER JOIN可能的意思是找不到匹配的朋友,并且由于没有进行任何匹配,因此数据库根本不返回任何内容。

我建议您 a) 重新考虑是否需要 INNER JOIN 和 b) 清理您的加入条件。

我在这里猜测了一下,但看起来您正在尝试从任何方向获取用户的所有朋友(即检查用户 A 是否 A 是 B 的朋友或 B 是 A 的朋友)。如果是这种情况,请尝试:

SELECT DISTINCT *
-- etc.
INNER JOIN FF_MyFriends ON
    FF_Users.id = FF_MyFriends.friendID 
    OR FF_Users.id = FF_MyFriends.userID

DISTINCT 很重要,因为如果 A 是 B 的朋友,B 是 A 的朋友,那么您最终会出现两次相同的行。

我希望它有所帮助。如果它不是您所需要的,请添加关于您真正需要的评论。

【讨论】:

  • 感谢您抽出宝贵时间帮助我。让我确切地解释一下这个页面需要什么,一个用户登录到一个系统,想要列出网站上的所有成员。在此用户列表中,他们会看到一个类似 v-card 的内容,其中包含图像、位置、年龄、生日等,如果不是朋友,还有一个朋友请求按钮,或者如果已经是朋友的话。所有那些左加入的人都从单独的表、用户详细信息、邮政编码、用户设置、用户信息中获取数据,并希望试图让朋友列表机器人而不是朋友成为朋友。解释得更好? (希望)
  • 它现在输出站点上的每个用户,但是如果尝试打印出用户/朋友数据,则每个成员都会打印出相同的数据。我可能认为我必须重新考虑漏洞 sql 请求是的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多