Php 无法使用PDO语句类型的对象

Php 无法使用PDO语句类型的对象,php,mysql,pdo,Php,Mysql,Pdo,当我尝试打开id按钮时,会出现此错误 Fatal error: Cannot use object of type PDOStatement as array... 错误所在的代码是 $pdo = Database::connect(); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $q = "SELECT * FROM books where user = '".$_SESSION['

当我尝试打开
id
按钮时,会出现此错误

Fatal error: Cannot use object of type PDOStatement as array...
错误所在的代码是

   $pdo = Database::connect();
   $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   $q = "SELECT * FROM books where user = '".$_SESSION['level']."'";

   if($res = $pdo->query($q))
   {
         if($res->fetchColumn() > 0) 
         {
                foreach($pdo->query($q) as $res)
                {
                        echo '<a href="users/books.php?user_id='. $res['user_id'] .'"> '.$res['name'].' </a>';         
                }
         }
         else
         {
                echo '<a href="users/bookAdd.php?user_id='. $res['user_id'] .'">Create Book</a>';
         }
    }   
    Database::disconnect();
$pdo=Database::connect();
$pdo->setAttribute(pdo::ATTR_ERRMODE,pdo::ERRMODE_异常);
$q=“从用户为“”的书籍中选择*”$\u会话['level']。“”;
如果($res=$pdo->query($q))
{
如果($res->fetchColumn()>0)
{
foreach($pdo->query($q)作为$res)
{
回声';
}
}
其他的
{
回声';
}
}   
数据库::断开连接();

我尝试的是当用户登录时,如果没有书籍显示给他,则单击按钮
创建书籍
。错误在else块中,其中是
users/bookAdd.php?user_id='$res['user_id'].
知道如何解决这个问题吗?

错误已经很清楚,您不能尝试访问PDOStatement对象上下文中的索引

您不能只使用
->query()
,然后尝试从创建的对象访问值。你还没有拿到结果

您需要正确获取结果:

$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// prep the statement
$q = $pdo->prepare("SELECT * FROM books WHERE user = :level");
$q->bindParam(':level', $_SESSION['level']); // bind it
$q->execute();
// fetch the results
$results = $q->fetchAll(PDO::FETCH_ASSOC);
if(count($results) > 0) {
    foreach($results as $res) {
        echo '<a href="users/books.php?user_id='. $res['user_id'] .'"> '.$res['name'].' </a>';
    }
} else {
    echo '<a href="users/bookAdd.php">Create Book</a>';
}

Database::disconnect();
$pdo=Database::connect();
$pdo->setAttribute(pdo::ATTR_ERRMODE,pdo::ERRMODE_异常);
//准备陈述
$q=$pdo->prepare(“从用户=:level的书籍中选择*);
$q->bindParam(':level',$_SESSION['level']);//绑起来
$q->execute();
//取得结果
$results=$q->fetchAll(PDO::FETCH_ASSOC);
如果(计数($results)>0){
foreach(结果为$res){
回声';
}
}否则{
回声';
}
数据库::断开连接();

错误已经很清楚,您无法尝试访问PDOStatement对象上下文中的索引

您不能只使用
->query()
,然后尝试从创建的对象访问值。你还没有拿到结果

您需要正确获取结果:

$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// prep the statement
$q = $pdo->prepare("SELECT * FROM books WHERE user = :level");
$q->bindParam(':level', $_SESSION['level']); // bind it
$q->execute();
// fetch the results
$results = $q->fetchAll(PDO::FETCH_ASSOC);
if(count($results) > 0) {
    foreach($results as $res) {
        echo '<a href="users/books.php?user_id='. $res['user_id'] .'"> '.$res['name'].' </a>';
    }
} else {
    echo '<a href="users/bookAdd.php">Create Book</a>';
}

Database::disconnect();
$pdo=Database::connect();
$pdo->setAttribute(pdo::ATTR_ERRMODE,pdo::ERRMODE_异常);
//准备陈述
$q=$pdo->prepare(“从用户=:level的书籍中选择*);
$q->bindParam(':level',$_SESSION['level']);//绑起来
$q->execute();
//取得结果
$results=$q->fetchAll(PDO::FETCH_ASSOC);
如果(计数($results)>0){
foreach(结果为$res){
回声';
}
}否则{
回声';
}
数据库::断开连接();

您直接在
foreach
中使用的
$pdo->query($q)
可能存在重复,这将不起作用。。。请参阅我在上面发布的副本…您在
foreach
中直接使用
$pdo->query($q)
的可能副本,这将不起作用。。。请参阅上面我发布的副本…但我还想在bookAdd上传递用户id。php@Goro由于没有结果,因此无法在其上传递任何Idfound@Goro什么是会话['user']?这是用户id吗?$\u会话['level']不是用户。。用户类型是否类似于
管理员为1
超级管理员为2等@Goro哦,我明白了,那么您的会话中一定有
$\u会话['user\u id']
?因为这个特定的用户登录正确吗?您可以在elseb中使用它,但我还想在bookAdd上传递用户id。php@Goro由于没有结果,因此无法在其上传递任何Idfound@Goro什么是会话['user']?这是用户id吗?$\u会话['level']不是用户。。用户类型是否类似于
管理员为1
超级管理员为2等@Goro哦,我明白了,那么您的会话中一定有
$\u会话['user\u id']
?因为这个特定的用户登录正确吗?你可以在else中使用它