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