MySQL读取错误的列


MySQL reading the wrong column?

这让我非常困惑。我以前做过很多次这样的查询,但这次似乎有问题。我甚至完全删除了表格并重新添加了它,所以我不确定问题是什么。

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

在"朋友"页面上,它列出了所有登录用户的朋友以及朋友的头像、用户名等。然而,值"friend_id"是拉ROW NUMBER(列id),而不是"其他用户id"(sender_id或receiver_id取决于发送请求的人……无论不是登录用户)。

好友表设置:id(INT 15,唯一,主要),sender_id(INT15),receiver_id(INT5),created(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);

然后一些代码显示的结果

当id为1的用户发送或接收好友请求时,friend_id=1 AS时,friend _id似乎会拉取ROW号或relationship_id,否则看起来会起作用。我只是不知道为什么会发生这种事。

例如,如果我替换$sender_id=$rowfriends['sender_id'];到$sender_id=RAND(2000);它为生成了随机id的用户显示正确的化身、用户名等。当用户为1时,它不起作用。

答案

我在下面贴出了答案,但我还不能接受。

您编码了:

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

但是我没有看到$user_id被设置。

会话与寄存器全局变量相结合可以重写变量
如果没有调试的迹象,就不可能再多说什么了。比如说,要回答"MySQL读错了列?"这个问题,不必在值检索和验证之间放置一整页代码。为什么不能在从数据库中获取此列值后立即显示它?

还要注意,自动递增唯一标识符字段无论如何都不是行号。这样一个错误的假设会导致另一个像这样的"神秘"错误
还要注意,与字符串不同,PHP中的变量应该在没有引号的情况下进行寻址。这样一个错误的用法会导致另一个"神秘"的错误,比如这个。

我删除并重新添加了每一行代码,结果发现最近修改的User和Avatar函数包含了一个函数,该函数包含了已经全局设置$friend_id变量的函数(隐藏得很深)。我将变量$relationship_id重命名为"friends"表中的列"id"。这允许我的原始代码工作。

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

显然,在我发现确切的问题之前,使用最后没有_id的变量$friend是有效的,因为该变量没有两个冲突的值。