我的问题是我要查询从登录请求的行中获取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变为变量时我做错了什么?

===============>>#1 票数:1 已采纳

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

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

或者如评论中提到的那样使用fetch()

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

它返回一行作为列数组,然后这将工作:

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

===============>>#2 票数: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;
    }
}

  ask by user3147145 translate from so

未解决问题?本站智能推荐:

2回复

PDO的新手,如何正确编写此SQL?

我是PDO的新手,我的问题是,在将$ input添加到查询中之前是否应该对其进行转义? 我应该如何最好地实施它?
3回复

新手问题:PDO和MYSQL INSERT查询问题

我试图更安全,并开始使用PDO和准备好的语句。 这已被推荐给我,我已经阅读了这两个网站: http : //net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access /和http://
1回复

为什么我的SELECT语句返回数据库名称作为列名称?! (pdo的新手)

嗨,谢谢您的阅读。 我是php的新手(但是我已经编程很长时间了),所以我决定使用pdo接口作为数据库查询的入门。 我确实放了一个小脚本进行测试,但是它返回数据库名称作为列名称之一。 为什么? 同样对于pdo专业人员,一旦我实例化了一个新的pdo对象而未指定数据库名称,我该如何选择
2回复

我正在努力用PDO升级登录脚本

我的函数中有一个自定义的query()函数。 文件。 我创建了一个login.php文件,但是当我执行SQL查询时,query()函数返回一个PDO对象,而不是我想要的关联数组。 我需要帮助传递参数以将其绑定到存储过程/准备好的语句。 以下是login.php文件: 建议co
2回复

jQuery AJAX发布到PHP的PDO INSERT无法与变量$('#id')。val()一起使用

我正在显示3个代码段。 方法1和2不起作用第三代码正在工作。 *********不起作用1开始************** *********不工作1结束************** 现在在$ .ajax中使用变量的方法(效果不佳): *********不工作2开始*
1回复

MySQL变量和PDO

我在使用MySQL变量的PDO查询遇到问题。 我已经在MySQL工作台中执行了该查询,以及直接从正在处理的内容和通过MySQL一般日志存储的查询中执行了查询,并获得了结果。 通过PDO运行时,我的rowCount()返回0。 我已经检查了错误日志,并尝试/捕获了PDOException
3回复

PDO不绑定变量

下面的代码返回一个空数组。 运行SQL查询时,它将返回40多个行。 现在被卡在这上面一个多小时了,他正盯着我拉头发。 有一件事我已经试过是手动正好连接上得到变量,然后查询成功 。 基于此,我认为问题在于绑定。
1回复

PDO检索ID [关闭]

我已经为此停留了一段时间,但是基本上我正在尝试在PHP中创建一个函数,该函数通过将用户名传递到函数中来检索用户ID。 我正在使用PHP的PDO,它可能使我脸上有些斑点,但出现以下错误: “致命错误:在第8行的/home/swinkidc/public_html/studentreac
2回复

PDO查询以显示ID信息

我有下表: 我有以下代码来获取用户的所有ID,我只想显示ID字段。 但是我无法使它工作。 我不断收到以下错误:
2回复

PDO将结果选择为变量

我只是从mysql切换到PDO,遇到了一些问题。 我正在尝试使用mysql做非常简单的事情,我想做的就是将查询结果保存到变量中。 我整天拖曳了Interweb,每个示例都在回显或打印结果,而我需要在变量中使用它们,以便可以在应用程序的其余部分中使用它们。 我有一个简单的数据库表,用