我仍然在我的代码中重做并删除旧的mysql_ *命令。我试图转移我的会话登录表单旧代码,这是我到目前为止所得到的:
public function login($user, $password)
{
if (!empty($user) && !empty($password))
{
$password = $web->doHash($user, $password); // in this function is (return sha1(strtoupper($user).':'.strtoupper($password))
$stmt = $db_login->prepare("SELECT * FROM account WHERE username=:user AND pass_hash=:password");
$stmt->bindValue(':user', $user, PDO::PARAM_STR);
$stmt->bindValue(':password', $password, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->rowCount();
if ($rows > 0)
{
$results_login = $stmt->fetch(PDO::FETCH_ASSOC);
$_SESSION['user_name'] = $results_login['username'];
$_SESSION['user_id'] = $results_login['id'];
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
之后,如果用户登录网站,我将使用支票:
public function isLogged()
{
return (!empty($_SESSION['user_id']) && !empty($_SESSION['user_name']));
}
但似乎 - 此函数返回总是为空,因为PDO中不存在$ _SESSION?当然,在我的网站上以这种形式使用注销:
public function logout()
{
unset($_SESSION['user_id']);
unset($_SESSION['user_name']);
}
但我认为PDO有不同的处理会话方式?我没有找到任何这样的东西我能以某种方式在PDO中添加$ _SESSION而不用更改代码吗?
我在我的网络项目中使用变量$_SESSION['user_name']
和$_SESSION['user_id']
。
要点:
1)如何正确使用PDO中的会话?
2)使用$stmt->fetch(PDO::FETCH_ASSOC);
和$stmt->fetchAll();
谢谢。
答案 0 :(得分:3)
答案如下:
session_start()
。$stmt->fetch()
将获取一行,fetchAll()
将获取整个结果集。答案 1 :(得分:2)
PDOStatement::rowCount()
不能运行mysql,所以$ rows不会返回任何内容。
另外,PDO与会话无关,它是处理数据库的扩展。
如果你想计算你可以做的结果数
$stmt->execute();
$results = $stmt->fetchAll();
$results = count($results);
答案 2 :(得分:1)
数目:
1)确保在使用Sessions
的所有页面的开头调用session_start()2)确保从查询中返回数据
更多信息
PDO::FETCH_ASSOC
检索按列名索引的数据。即associative array。
在我看来,使用PDO::FETCH_ASSOC
总是更好,因为很清楚正在提取哪些数据&处理。
如果选择fetchAll(PDO::FETCH_ASSOC)
有关 FetchAll
PDO功能的更多信息,请查看here