致命错误:未捕获的错误:不能使用 PDOStatement 类型的对象作为数组

Posted

技术标签:

【中文标题】致命错误:未捕获的错误:不能使用 PDOStatement 类型的对象作为数组【英文标题】:Fatal error: Uncaught Error: Cannot use object of type PDOStatement as array 【发布时间】:2019-07-04 12:45:39 【问题描述】:

我想要一个 php 脚本,它可以从我的 db 表中随机选择一个行并将“dispensered”的值更改为 1。 我确定这有点愚蠢,但我对这些东西很陌生。

这是我的代码:

<?php

$hostname = 'localhost';
$user = 'root';
$pass = '';
$database = 'testt';

$db_connection = new PDO( "mysql:host=" . $hostname . ";dbname=" . $database, 
$user, $pass );

$results = $db_connection->query( 'SELECT username, password FROM accounts WHERE dispensered = 0 ORDER by rand() LIMIT 1' );

$db_connection->query( 'UPDATE accounts SET dispensered=1 WHERE id='.$results['id'].'' );

foreach ( $results as $row ) 
    echo '<p id="username">' . $row['username'] . '</p>';
    echo '<p id="password">&ndash;' . $row['password'] . '</p>';





// Close the connection
$db_connection = null;

最好的问候

Fatal error: Uncaught Error: Cannot use object of type PDOStatement as 
array in C:\xampp\htdocs\test\index.php:13 Stack trace: #0 main thrown 
in C:\xampp\htdocs\test\index.php on line 13

编辑:试过了;

$test = $results;
$db_connection->query( 'UPDATE accounts SET dispensered=1 WHERE 
id='.$test['id'].'' );

但它也没有用:(

【问题讨论】:

【参考方案1】:

PDO::query — 执行 SQL 语句,将结果集作为 PDOStatement 对象返回。您正在尝试将 $results 作为更新查询中的数组进行访问。因此,您会看到此错误。您需要在 for 循环中从 $row 捕获“id”值并在此之后运行更新查询。

【讨论】:

@DangerSeeker 太棒了...你能投票给我的答案吗?

以上是关于致命错误:未捕获的错误:不能使用 PDOStatement 类型的对象作为数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP致命错误:未捕获的错误:不能将stdClass类型的对象用作数组

致命错误:未捕获的错误:未找到“Omnipay\Omnipay”类

突然出现Apache错误?致命错误:未捕获错误

Laravel - 致命错误:未捕获的错误:找不到类'Auth'

致命错误:未捕获的错误:未找到类“用户名”

致命错误:未捕获的错误:找不到类“App\Config”