MySQL读错了列?

时间:2012-01-21 23:17:28

标签: php mysql

这绝对令我感到困惑。我之前已经完成了很多次的查询,但这个问题似乎有问题。我甚至完全放弃了桌子并重新添加它,所以我不确定是什么问题。

基本上我有一个名为friends的表,其中一个用户(sender_id)可以向另一个用户(receiver_id)发送好友请求,状态最初设置为零,然后当接收者接受好友请求时状态更新为1

在“朋友”页面上,它会列出所有已登录用户的朋友的朋友的头像,用户名等。但是,值“friend_id”正在拉出ROW NUMBER(列ID)而不是“其他用户ID” (sender_id或receiver_id取决于发送请求的人......不管是不是登录用户)。

好友表设置:id(INT 15,唯一,主要),sender_id(INT 15),receiver_id(INT 15),创建(datetime),status =(INT 1)

$getfriends = mysql_query("SELECT * FROM friends WHERE sender_id = '$user_id' OR receiver_id = '$user_id' ORDER BY status ASC, id DESC LIMIT $offset, $user_friends_limit", $conn);

然后设置表的一些代码

while ($rowfriends = mysql_fetch_assoc($getfriends)) {

$relationship_id = $rowfriends['id']; // this doesn't actually need to be called since I don't need to use this number
$sender_id = $rowfriends['sender_id'];
$receiver_id = $rowfriends['receiver_id'];
$friend_status = $rowfriends['status'];
$friend_date = $rowfriends['created'];


// THE IMPORTANT PART THAT ASSIGNS THE FRIEND ID
if($sender_id == "$user_id"){
    $friend_id = "$receiver_id";
}
else {
    $friend_id = "$sender_id";
}

if($friend_status == 0){
     $since = "Request Sent";
}
elseif($friend_status == 1){
     $since = "Friend Since";
}

// FUNCTIONS --- ALL OF THE FUNCTIONS ARE RETURNING WITH THE WRONG INFO
User($friend_id);
Avatar($friend_id);
ProfileURL($friend_id);
UserFavorites($friend_id);
UserPoints($friend_id);
UserPosts($friend_id);
DateConvert($friend_date);

然后一些代码显示结果

似乎当friend_id = 1 AS在id为1的用户发送或接收好友请求时,则friend_id正在拉取ROW号或relationship_id,否则它看起来像是在工作。我只是不确定为什么会这样。

例如,如果我替换$ sender_id = $ rowfriends ['sender_id']; to $ sender_id = RAND(2,2000);它为用户显示正确的头像,用户名等,并生成任何随机ID。当用户为1时,它不起作用。

ANSWER

我在下面发布了答案,但我还是不能接受。

3 个答案:

答案 0 :(得分:0)

您编码:

    // THE IMPORTANT PART THAT ASSIGNS THE FRIEND ID
    if($sender_id == "$user_id"){
...

但我没有看到$ user_id正在设置。

答案 1 :(得分:0)

与register globals结合的会话可能会重写变量 没有调试的迹象是不可能再说的。说,回答“MySQL读错列?”的问题。一个人不必在价值检索和验证之间放一整页代码。为什么不能在从数据库中获取此列后立即显示此列值?

另请注意,自动增量唯一标识符字段不是任何方式的行号。这样一个错误的假设会引起另一个像这样的“神秘”错误 还要注意,与字符串不同,PHP中的变量应该没有引号。这样的错误用法会导致另一个像这样的“神秘”错误。

答案 2 :(得分:0)

我删除并重新添加了代码的每一行,结果显示了最近修改过的用户和头像功能,其中包含一个函数,该函数包含一个已经全局设置了$ friend_id变量的函数(非常隐藏) 。我重命名了变量$ relationship_id,因为它是“friends”表中的列“id”。这使我的原始代码能够正常工作。

if($user_id == $receiver_id){
    $friend_id = "$sender_id";
}
else {
    $friend_id = "$receiver_id";
}

显然在我找出确切的问题之前使用最终没有_id的变量$ friend,因为该变量没有两个冲突的值。