好的,我对PDO一无所知,我的朋友只是让我在这里发帖,因为他不太擅长英语。无论如何,这就是他向我解释的原因:
提供的代码应该得到几个值,保存它们,并且它应该在前面获得的值的帮助下从另一个表中得到一些东西。根据我朋友的问题是它没有得到第二个值。
代码:
$user_email = $_SESSION['user_email'];
$query = $db->prepare("SELECT username,id,password FROM user WHERE email=:email");
$query->bindParam(':email', $user_email, PDO::PARAM_INT);
$query->execute();
$row = $query->fetch();
$user_username=$row['username'];
$user_group=$row['group'];
$query_group = $db->prepare("SELECT color,name FROM group WHERE id=:id");
$query_group->bindParam(':id', $user_group, PDO::PARAM_INT);
$query_group->execute();
$row = $query_group->fetch();
$group_color=$row['color'];
$group_name=$row['name'];
答案 0 :(得分:3)
用作表名的单词group
需要用反引号括起来。 group
是保留的关键字(GROUP BY
子句)。
SELECT
color,
name
FROM `group`
WHERE id = :id
使用上述方法可行。
您也可以使用JOIN
子句缩短整个代码。如commented above by Prix,代码应为:
$user_email = $_SESSION['user_email'];
$query = $db->prepare("SELECT
u.username,
u.id,
u.password,
g.color,
g.name
FROM user u
JOIN `group` g
ON g.id = u.id
WHERE u.email = :email");
// I think emails are supposed to be `PDO::PARAM_STR`
$query->bindParam(':email', $user_email, PDO::PARAM_INT);
$query->execute();
$row = $query->fetch();
$user_username = $row['username'];
$group_color = $row['color'];
$group_name = $row['name'];
答案 1 :(得分:1)
您的select语句中没有group
。
如果您在选择中未使用*
,则必须在查询中包含字段名称。
$query = $db->prepare("SELECT username,id,password FROM user WHERE email=:email");
此查询仅向您提供username,id,password
而不是字段group
。
所以尝试使用$row['group']
是错误的。
$user_group=$row['group'];
所以也将group
放在你的选择语句中
也可以将反对组合作为保留词
$query = $db->prepare("SELECT id, username, password, `group` FROM user WHERE email=:email");
这也是重要变量(例如下一个查询)考虑其有效性的原因。
if (isset($row['group'])) {
database logic
} else {
error
}
通过这个简单的测试,您可以找到错误本身。