Php 同时使用两个查询。PDO

Php 同时使用两个查询。PDO,php,mysql,sql,select,pdo,Php,Mysql,Sql,Select,Pdo,好吧,我对PDO一无所知,我的朋友让我把这篇文章发到这里,因为他英语不太好。不管怎样,他是这样向我解释的: 所提供的代码应该得到几个值,保存它们,并且应该在前面得到的值的帮助下从另一个表中得到一些东西。根据我朋友的说法,问题是它没有得到第二个值 代码: 用作表名的单词group需要用反勾括起来group是保留关键字(group BY子句) 使用上述方法将有效 也可以使用JOIN子句来缩短整个代码。如前所述,代码应为: $user_email = $_SESSION['user_email'];

好吧,我对PDO一无所知,我的朋友让我把这篇文章发到这里,因为他英语不太好。不管怎样,他是这样向我解释的:

所提供的代码应该得到几个值,保存它们,并且应该在前面得到的值的帮助下从另一个表中得到一些东西。根据我朋友的说法,问题是它没有得到第二个值

代码:


用作表名的单词
group
需要用反勾括起来
group
是保留关键字(
group BY
子句)

使用上述方法将有效


也可以使用
JOIN
子句来缩短整个代码。如前所述,代码应为:

$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'];

用作表名的单词
group
需要用反勾括起来
group
是保留关键字(
group BY
子句)

使用上述方法将有效


也可以使用
JOIN
子句来缩短整个代码。如前所述,代码应为:

$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'];

您的select语句中没有
组。

如果在select中未使用
*
,则必须在查询中包含字段名

$query = $db->prepare("SELECT username,id,password FROM user WHERE email=:email");
此查询只返回
用户名、id、密码
而不返回字段

所以尝试使用
$row['group']
是错误的

$user_group=$row['group'];   
因此,在select语句中也加入
group
将组也放在backticks中,这是一个保留字

$query = $db->prepare("SELECT id, username, password, `group` FROM user WHERE email=:email");

这也是重要变量(如下一个查询)考虑其有效性的原因。

if (isset($row['group'])) {
    database logic
   } else {
    error
   }

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

您的select语句中没有
组。

如果在select中未使用
*
,则必须在查询中包含字段名

$query = $db->prepare("SELECT username,id,password FROM user WHERE email=:email");
此查询只返回
用户名、id、密码
而不返回字段

所以尝试使用
$row['group']
是错误的

$user_group=$row['group'];   
因此,在select语句中也加入
group
将组也放在backticks中,这是一个保留字

$query = $db->prepare("SELECT id, username, password, `group` FROM user WHERE email=:email");

这也是重要变量(如下一个查询)考虑其有效性的原因。

if (isset($row['group'])) {
    database logic
   } else {
    error
   }

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

您可以使用一个查询来获取所有数据,并使用
JOIN
选择u.username、u.id、u.password、g.color、,g、 来自用户u JOIN`group`g ON g.id=u.id其中u.email=:email
:)请记住,
group
在MySQL上是一个保留字,您必须在其上使用反勾号。您可以使用一个查询来获取所有数据,
JOIN
选择u.username、u.id、u.password、g.color、,g、 来自用户u JOIN`group`g ON g.id=u.id,其中u.email=:email
:)请记住,
group
在MySQL上是一个保留字,您必须在其上使用反勾号。在OP的问题中:第二个SELECT不起作用,第一个SELECT语句中没有
group
。对于
$query\u group->bindParam(':id',$user\u group,PDO::PARAM\u INT)很重要
@moskito-x但是,第二个示例可以工作,因为他需要匹配ID。在OP的问题中:第二个SELECT不起作用,第一个SELECT语句中没有
。对于
$query\u group->bindParam(':id',$user\u group,PDO::PARAM\u INT)很重要@moskito-x第二个示例可以工作,因为他需要匹配ID。