我使用PDO连接到我的数据库。在那里,我有一个用于存储用户的表。在该表中,我有5列:id,用户名,密码,邮件和性别。
我真正想要的是存储在SESSION变量中,即已登录用户的性别。我不确切知道要使用什么,因为我所见过的所有例子,通常用于使用foreach语句将db的所有结果打印到网页中,但这不是我想要的。
实际上,这是我的代码:
$connection = new PDO('mysql:host=localhost;dbname=db', "user", "password");
$sql = 'SELECT * FROM users WHERE username = :username AND password = :password';
$statement = $connection->prepare($sql);
$statement->bindParam(':username', $_POST['username'], PDO::PARAM_STR, 12);
$statement->bindParam(':password', $_POST['password'], PDO::PARAM_STR, 30);
$result = $statement->execute();
if ($result) {
$result = $statement->fetchAll();
if (!empty($result)){
$_SESSION['login'] = true;
$_SESSION['username'] = $_POST['username'];
echo 'Hello '.$_POST['username'].', you have been connected successfully.';
}
else {
echo 'Sorry, this user do not exist.';
}
}
所以,这是正确的工作 但现在,我想要的是将数据库中的性别值存储在$ _SESSION [' sex']变量中。我怎样才能做到这一点?
感谢。
答案 0 :(得分:0)
只需从结果行中分配:
$_SESSION['sex'] = $result[0]['sex'];
您必须使用[0]
因为您使用了fetchAll
,它会返回行和列的二维数组。
答案 1 :(得分:0)
您只需在用户名后添加会话,您已经从查询中选择了
$_SESSION['username'] = $_POST['username'];
$_SESSION['sex'] = $result[0]['sex'];
您可能希望从查询执行中删除$result
,所以此行
$result = $statement->execute();
将是
$statement->execute();