1

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

2 回答 2

3

group用作表名的单词需要用反引号括起来。group是保留关键字(GROUP BY条款)。

SELECT 
    color, 
    name 
FROM `group`
WHERE id = :id

使用上述将工作。


您也可以使用JOIN子句来缩短整个代码。正如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'];
于 2013-09-16T21:21:00.483 回答
1

group的 select 语句中没有。

如果您不在*您的选择中使用,您的查询中必须有字段名称。

$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
   }

通过这个简单的测试,您会发现错误本身。

于 2013-09-16T21:50:23.457 回答