【问题标题】:Cannot use object of type PDOStatement as array in不能将 PDOStatement 类型的对象用作数组
【发布时间】:2020-06-30 03:44:51
【问题描述】:

我有这个错误: 致命错误:未捕获错误:不能在 C:\xampp\htdocs\seth\Plugins\login\php\completedetails.php:28 中使用 PDOStatement 类型的对象作为数组:28 堆栈跟踪:#0 {main} 在 C:\xampp\ 中抛出htdocs\seth\Plugins\login\php\completedetails.php 在第 28 行

几天前它是函数,但现在它通过了,¿我应该做什么?,我留下了代码

session_start();

$_SESSION['id'];
$id = $_SESSION['id'];
$name = $_POST['name'];
$password = $_POST['password'];
$password = password_hash($password, PASSWORD_DEFAULT); 
$team = $_POST['team'];


    if($name == "" && $password == "" && $team == ""){
        return false;
    }

    else {
    require './conectar.php';
    $resultset = $conn->prepare("SELECT * FROM users WHERE id = '$id' LIMIT 1");
    $resultset->execute();
    $resultkey = $resultset->fetch();

    if($resultkey !== false) {

        $update = "UPDATE users SET name = :name, password = '$password' WHERE id = '$id' LIMIT 1";
        $up = $conn->prepare($update);
        $up->bindParam(':name', $_POST['name'], FILTER_SANITIZE_SPECIAL_CHARS);
        $up->execute();
        $_SESSION['name'] = $up['name'];

    }

}

【问题讨论】:

    标签: php


    【解决方案1】:

    您需要先获取查询结果:

    $up = $conn->prepare($update);
    $up->bindParam(':name', $_POST['name'], FILTER_SANITIZE_SPECIAL_CHARS);
    $up->execute();
    $result = $up->fetch();
    $_SESSION['name'] = $result['name'];
    

    框架中的fetch 方法可能会返回一个对象而不是数组。在这种情况下,您可以像这样访问 name 属性:

    $result->name;
    

    无论哪种方式,您都不能使用 $up 来获取名称,因为正如您的错误所说,它是 PDOStatement 类型的对象,实际上并不是查询的结果。

    【讨论】:

    • 不客气!如果此答案解决了您的问题,请考虑将其标记为已接受,以帮助未来的用户确定正确答案。
    猜你喜欢
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2012-03-29
    • 2011-10-12
    • 2018-04-27
    相关资源
    最近更新 更多