PDO的新手努力将我的结果的id变为变量

时间:2014-04-20 00:01:00

标签: php mysql pdo

我的问题是我要查询从登录请求的行中获取id并将$ _SESSION名称设置为该行的id,但我不确定如何正确获取它,因为我的常用方法似乎不是工作

所以我试试..

if (isset($_POST['username']) && ($_POST['password'])) {
$username = trim($_POST['username']);
$username = strtolower($username);
$password = trim($_POST['password']);
$password= hash('sha256', $password);
$stmt = $dbh->prepare("SELECT `id` FROM `1_users` WHERE username=? AND password=? LIMIT 1");
$stmt->bindValue(1, $username, PDO::PARAM_STR);
$stmt->bindValue(2, $password, PDO::PARAM_STR);
$stmt->execute();
$row = $stmt->rowCount();
if ($row) {
// Match
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$_SESSION['user'] = $result['id'];
$_SESSION['logged_in'] = TRUE;
$_SESSION['ip'] = hash('sha1', "{$_SERVER['REMOTE_ADDR']}");
echo $result['id'];
//header ("location: staff.php");
}

不幸的是$result['id']错误的是一个未完成的索引.. 并且echo $result['id'];没有输出任何内容。但是我知道行被发现所以我在尝试将该行的id变为变量时我做错了什么?

2 个答案:

答案 0 :(得分:1)

所以fetchAll()返回一个行数组(即使只有一行),它们本身就是一个列数组,所以你需要:

$_SESSION['user'] = $result[0]['id'];

或者如评论中所述,使用fetch()

$result = $stmt->fetch(PDO::FETCH_ASSOC);

返回一行作为列数组,然后这将起作用:

$_SESSION['user'] = $result['id'];

答案 1 :(得分:1)

if (isset($_POST['username']) && $_POST['password']) {
    $username = trim($_POST['username']);
    $password = trim($_POST['password']);
    $password = hash('sha256', $password);
    $stmt = $dbh->prepare("SELECT id FROM 1_users WHERE username=? AND password=?");
    $stmt->execute([$username,$password]);
    $id = $stmt->fetchColumn(); // <-- here you go
    if ($id) {
        $_SESSION['user'] = $id;
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
        header ("location: staff.php");
        exit;
    }
}