【问题标题】:Getting no data from query. PDO没有从查询中获取数据。 PDO
【发布时间】:2013-09-21 08:52:34
【问题描述】:

好的,所以我的问题是这段代码什么也不返回,至少它不打印任何东西。 唯一似乎有效的是 $user_email 可以打印用户的电子邮件。

代码:

        $user_email = $_SESSION['user_email'];

        $query = $db->prepare("SELECT u.username, g.color, g.name FROM `user` u JOIN `group` g ON g.id = u.id WHERE u.email = :email");

        $query->bindParam(':email', $user_email, PDO::PARAM_STR);

        $query->execute();

        $row = $query->fetch();
        $user_username = $row['username'];
        $group_color = $row['color'];
        $group_name = $row['name'];
        print "Values: ".$row['username']." | ".$row['name']." <br>";

“用户”表包含 7 个不同的键:

id(bigint,主键,auto_increment),组(int),电子邮件(varchar),密码(varchar),用户名(varchar),名称(varchar),验证(int)。

“组”表包含 3 个不同的键:

id(bigint、主键、auto_increment)、颜色(varchar)、名称(varchar)。

这就是表格里面的全部内容。

【问题讨论】:

  • 我认为u JOIN group g ON g.id = u.id WHERE 这一行应该是u JOIN group g ON g.id = u.group_id WHERE 你可能是加入了错误列的表。
  • 是的,但即使我分开以便user 获得它自己的值,它仍然没有给我任何东西。
  • 当你在 phpadmin 进行测试查询时,查询结果是什么? (我正在尝试将 PDO 内容与潜在的查询问题分开......)
  • 好的,我按照你的要求做了,我必须在电子邮件所在的位置添加“才能使其正常工作。这相关吗?
  • 尝试简单地查询 SELECT u.username, g.color, g.name FROM user u JOIN group g ON g.id = u.id in phpMyAdmin。我同意 Dipesh 认为这是一个查询问题。您可以使用usergroup 的表格详细信息编辑您的问题吗?

标签: php mysql pdo


【解决方案1】:

在我看来查询应该是

SELECT u.username, g.color, g.name
FROM `user` u
INNER JOIN `group` g
    ON u.`group` = g.id
WHERE u.email = :email

此外,由于user.group 似乎是group.id 的外键,它也应该是bigint,而不是int(外键应该与其目标主键的类型相同)。

还有……

group 对于表和列来说都是一个糟糕的名称。尽量避开reserved words。我会选择user_group 用于表格,group_id 用于列。

【讨论】:

  • 这取决于所使用的引擎。 MyISAM 没有外键这样的约束,因此不需要两列都是完全重复的。
  • u.id = g.id 上的内部联合“组”g ...?如果你的意思是 u.group = g.id,那么 bigint 怎么能 = int?
  • @hjpotter92 即使您没有使用真正的外键(只是隐含的外键),列也应该匹配。否则,您将遇到无法将值插入较小列的情况
  • @zipzit 这就是为什么我对不同的数据类型做了注释。它们可以匹配到 int 的上限,即 2147483647(有符号)或 4294967295(无符号)。
猜你喜欢
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 2012-10-22
  • 1970-01-01
  • 2016-10-06
  • 2020-06-19
相关资源
最近更新 更多