同时使用两个查询。 PDO

时间:2013-09-16 21:18:03

标签: php mysql sql select pdo

好的,我对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'];

2 个答案:

答案 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
   }

通过这个简单的测试,您可以找到错误本身。

相关问题