Php 简单选择查询中返回的行ID不正确

Php 简单选择查询中返回的行ID不正确,php,mysql,codeigniter,Php,Mysql,Codeigniter,我使用CodeIgniter运行以下查询: $query = $this->db->query("SELECT users.*, user_profiles.* FROM users, user_profiles WHERE " . "users.id = $user_id AND user_profiles.user_id = $user_id"); $row = $query->row(); 我放置了一个回音来获取最后一个查询$this->db->last\u query

我使用CodeIgniter运行以下查询:

$query = $this->db->query("SELECT users.*, user_profiles.* FROM users, user_profiles WHERE " . "users.id = $user_id AND user_profiles.user_id = $user_id");
$row = $query->row();
我放置了一个回音来获取最后一个查询$this->db->last\u query。这表明:

SELECT users.*, user_profiles.* FROM users, user_profiles WHERE users.id = 6850 AND user_profiles.user_id = 6850
它返回的结果是:

object(stdClass)[24]
  public 'id' => string '6849' (length=4)
结果显示的id是6849。我差点从椅子上摔下来!我在MySQL数据库上运行了相同的查询,该查询返回的id为6850。6850是正确的ID


我不知道如何调试它,因为这是最简单的查询。感谢您的帮助。

明确选择您的列,并将其命名为*something*。然后检查一下身份证


可能显示的是表用户配置文件的id,而不是用户表中的实际用户id,因为您没有指定列。

显式选择您的列,并将其命名为*something*。然后检查一下身份证


很可能显示的是表用户配置文件的id,而不是用户表中的实际用户id,因为您没有指定列。

请尝试将它们连接起来,而不是对两个表都使用$user\u id。也许这就是把事情搞砸的原因?其中users.id=$user\u id和user\u profiles.user\u id=users.idRocket击败了我一拳+1-$sql='SELECT users.*,user\u profiles.*FROM users,user\u profiles WHERE users.id='.$user\u id.'和user\u profiles.user\u id=users.id';这可能不是100%的问题,但这是一种更标准的连接表的方法,不会有任何伤害。。。这通常是一种不好的做法:相反,您应该显式地命名列。如果表结构像另一个开发人员一样意外地发生变化,它会使调试变得更简单。好的,我尝试了Rocket的想法,得到了相同的结果。我还尝试了一个更简单的连接选择*从用户连接用户配置文件。id=user\u profiles.user\u id和users.id=$user\u id。仍然遇到相同的问题@我不认为这是问题所在,但无论如何,这是更好的练习。现在,不要直接将查询传递到$this->db->query,而是将其放入一个变量中,并使用$sql;在执行查询之前。我强烈怀疑$this->db->last\u query欺骗了您,请尝试加入它们,而不是对这两个表使用$user\u id。也许这就是把事情搞砸的原因?其中users.id=$user\u id和user\u profiles.user\u id=users.idRocket击败了我一拳+1-$sql='SELECT users.*,user\u profiles.*FROM users,user\u profiles WHERE users.id='.$user\u id.'和user\u profiles.user\u id=users.id';这可能不是100%的问题,但这是一种更标准的连接表的方法,不会有任何伤害。。。这通常是一种不好的做法:相反,您应该显式地命名列。如果表结构像另一个开发人员一样意外地发生变化,它会使调试变得更简单。好的,我尝试了Rocket的想法,得到了相同的结果。我还尝试了一个更简单的连接选择*从用户连接用户配置文件。id=user\u profiles.user\u id和users.id=$user\u id。仍然遇到相同的问题@我不认为这是问题所在,但无论如何,这是更好的练习。现在,不要直接将查询传递到$this->db->query,而是将其放入一个变量中,并使用$sql;在执行查询之前。我强烈怀疑你被$this->db->last\u queryBINGO欺骗了!这是正确的,我明白为什么!非常感谢。我现在可以停止大笑,回到我应该解决的其他问题上@Abs值6849来自user_profiles表,因为id列覆盖了users表的id列Rob是对的,您必须为columns@dianuj你说得对,我只是编辑了这个答案来解释。如果您没有遵循指定所需列的最佳实践,就会发生这种情况。请随意标记为正确答案,以便其他人知道:我很高兴将此标记为答案。我离开了一会儿,希望你们能得到更多的选票,因为这个答案节省了我一些时间。答对了!这是正确的,我明白为什么!非常感谢。我现在可以停止大笑,回到我应该解决的其他问题上@Abs值6849来自user_profiles表,因为id列覆盖了users表的id列Rob是对的,您必须为columns@dianuj你说得对,我只是编辑了这个答案来解释。如果您没有遵循指定所需列的最佳实践,就会发生这种情况。请随意标记为正确答案,以便其他人知道:我很高兴将此标记为答案。我离开了一会儿,希望你们能得到更多的选票,因为这个答案节省了我一些时间。