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中使用它