【问题标题】:MySQL reading the wrong column?MySQL读取错误的列?
【发布时间】:2012-02-15 23:19:34
【问题描述】:

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

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

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

Friends 表设置:id (INT 15, unique, primary), sender_id (INT 15), receiver_id (INT 15), 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 时,当 ID 为 1 的用户发送或接收朋友请求时,朋友 ID 正在拉 ROW 编号或关系 ID,否则它看起来像它的工作。我只是不确定为什么会这样。

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

回答

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

【问题讨论】:

  • 为什么这个问题被标记为mysql错误?
  • 因为一些奇怪的原因它没有正确计算。我仍然不知道它为什么要这样做,但我决定重命名我的变量并且它起作用了
  • 所以,您只是添加了一个随机错误编号,您不知道它的用途是什么?这是你所有问题的根源。
  • 什么?我不知道你的意思。我的查询调用我的数据的方式出现错误。尽管我的代码编写正确,但它调用了错误的信息。变量有问题,我更改了变量名,一切正常。你甚至读过我的问题吗?我将标签作为 mysql 错误,因为我使用的是 mysql 并且有一个错误
  • 是的,我做到了。甚至您添加的“答案”。很明显,mysql与这个“错误”无关。如果确实是“不正确的数据”,您将无法执行$friend = "$sender_id";。去图吧。

标签: php mysql


【解决方案1】:

我删除并重新添加了每一行代码,结果是 User AND Avatar 函数最近都被修改了,其中包含一个函数(非常隐藏),该函数已经全局设置了 $friend_id 变量.我重命名了该变量 $relationship_id,因为它是“朋友”表中的“id”列。这使我的原始代码能够工作。

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

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

【讨论】:

    【解决方案2】:

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

    还请注意,自动增量唯一标识符字段无论如何都不是行号。这种错误的假设会导致另一个像这样的“神秘”错误。
    另请注意,与字符串不同,PHP 中的变量应该不带引号来寻址。这种错误的用法会导致另一个像这样的“神秘”错误。

    【讨论】:

    • 没有使用引号,也没有使用引号,我想我不是指行号,而是调用 id 列,当发送者或接收者等于 1 时它会改为调用 id 列。将friend_id更改为friend使其工作,我不知道为什么。我回显了用户 ID、发送者 ID、接收者 ID 和“ID”列,它们都显示正确,只是friend_id = etc的错误
    【解决方案3】:

    你编码:

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

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

    【讨论】:

    • 用户 id 是一个全局变量,它在每个页面上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2012-06-19
    • 2018-06-09
    • 2012-10-07
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多