【问题标题】:Fatal error: Cannot use object of type stdClass as array in ... on line 10致命错误:第 10 行的 ... 中不能使用 stdClass 类型的对象作为数组
【发布时间】:2018-06-15 08:10:25
【问题描述】:

我收到此错误消息:

致命错误:不能使用 stdClass 类型的对象作为数组

代码:

if(isset($_POST['anmelden']))
{
    $email = $_POST['email'];
    $passwort = $_POST['passwort'];

    $statement = $pdo->prepare("SELECT * FROM hwvor_nutzer WHERE nutzer_email = :email");
    $result = $statement->execute(array('email' => $email));
    $user = $statement->fetch();

    if($user !== false && password_verify($passwort, $user['passwort'])) 
    {
        $_SESSION['userid'] = $user['id'];
        die('Login erfolgreich. Weiter zum <a href="nutzerberich.php">internen Bereich</a>');
    } 
    else 
    {
        $errorMessage = "E-Mail oder Passwort war ungültig<br>";
    }
}

【问题讨论】:

    标签: php arrays compiler-errors stdclass


    【解决方案1】:

    您可能希望在获取数据之前检查$result 的值,以防查询失败。我猜这个问题是由$user['passwort'] 引起的

    if($user !== false && password_verify($passwort, $user['passwort']))
    

    如果查询失败,则$user = $statement-&gt;fetch(); 不会将数组分配给$user,而是分配其他无法作为数组处理的数组。

    另外,我相信这条线

    $result = $statement->execute(array('email' => $email));
    

    应该改为

    $result = $statement->execute(array(':email' => $email));
    

    注意多余的:,好像是必需的,看examples on php.net

    【讨论】:

    • 究竟是什么不起作用?请提供更多信息。你添加:了吗?你检查$result 的值了吗?你把$user的内容转储了吗?如果你这样做了,他们的价值观是什么?
    【解决方案2】:

    听起来您的 PDO 默认获取对象而不是数组,请尝试使用参数调用 fetch 以隐式获取为数组,您还应该尝试转储您收到的结果对象以查看它是什么.

    $user = $result-&gt;fetch(PDO::FETCH_ASSOC);

    【讨论】:

    • 根据documentation on php.net,默认为PDO::FETCH_BOTH,它返回一个数组,该数组由结果集中返回的列名和0索引的列号索引。
    • 根据文档,默认是PDO::ATTR_DEFAULT_FETCH_MODE (which defaults to PDO::FETCH_BOTH).我不知道他的系统上还有什么可能会改变PDO::ATTR_DEFAULT_FETCH_MODE,如果出现任何错误,fetch总是返回false,如果结果是一个对象似乎获取模式不是原来的默认值
    • 什么不起作用? @Striezel 对您密钥中的 : 提出了很好的意见...如果您需要其他帮助,您需要向我们提供更多信息,您是否尝试打印 $user 的值?还是$result ?如果有,价值是多少?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2014-07-18
    • 2016-05-16
    相关资源
    最近更新 更多