Php 注意:类PDOStatement的对象无法转换为int

Php 注意:类PDOStatement的对象无法转换为int,php,mysql,pdo,smarty,Php,Mysql,Pdo,Smarty,我无法找出上面的错误。以前有人见过这个吗。我将PHP与Smarty一起使用,并将PDO合并到我的代码中 PHP变量_转储代码$data$smarty->assign(“结果”,$data) Smarty模板中的PHP错误: 注意:第25行的/var/www/vhosts/somesite.com/httpdocs/templates_c/3d14690fd8419657273a6dce45bbca85dfc1e261.file.bragsdata.tpl.php中的类PDOStatement的对

我无法找出上面的错误。以前有人见过这个吗。我将PHP与Smarty一起使用,并将PDO合并到我的代码中

PHP变量_转储代码$data
$smarty->assign(“结果”,$data)

Smarty模板中的PHP错误:

注意:第25行的/var/www/vhosts/somesite.com/httpdocs/templates_c/3d14690fd8419657273a6dce45bbca85dfc1e261.file.bragsdata.tpl.php中的类PDOStatement的对象无法转换为int

Smarty模板的第25行:

$\u smarty\u tpl->tpl\u vars['smarty']->value['section']['res']['loop']=is\u数组($\u loop=$\u smarty\u tpl->getVariable('results')->value)?计数($\u循环):最大值(0,(int)$\u循环);取消设置($_循环)

不确定问题出在哪里。非常感谢你的帮助

更新:使用
fetchAll(PDO::FETCH_ASSOC)调用函数


这是因为
PDOStatement
严格来说不是数组类型。不过,它实现了可遍历的,所以我很惊讶Smarty不接受它是可以循环的

要将数据库结果转换为标准数组,必须使用
->fetchAll()


这是因为
PDOStatement
严格来说不是数组类型。不过,它实现了可遍历的,所以我很惊讶Smarty不接受它是可以循环的

要将数据库结果转换为标准数组,必须使用
->fetchAll()


错误消息非常简单-
$data
变量包含与预期不同的内容。
看起来您正在将整个PDO对象传递到模板中,而不是首先获取某个特定值

我建议在没有Smarty或任何东西的情况下,单独与PDO玩一段时间,以熟悉它并学习如何获得所需的价值。

或者在赋值之前,至少使用
var\u dump()
检查您的值。

错误消息非常简单-
$data
变量包含与预期不同的内容。
看起来您正在将整个PDO对象传递到模板中,而不是首先获取某个特定值

我建议在没有Smarty或任何东西的情况下,单独与PDO玩一段时间,以熟悉它并学习如何获得所需的价值。

或者至少在赋值之前用
var_dump()
检查你的值。

我猜是因为
PDOStatement上的数组()
给出了
false
。我猜是因为
PDOStatement上的数组()
给出了
false
。我刚刚用应该返回fetchAll的函数调用更新了我的帖子,但它显然不起作用。您的建议确实在函数外部起作用,但为什么会这样?@ClaudeGrecea您应该
从您的函数返回$res->fetchAll(PDO::FETCH_ASSOC)
。这很有效!你就是那个人!你能推荐一本关于PDO高级主题的书或网站吗?PHP.net在解释方面做得很差;它应该真的支持传递查询结果对象。我刚刚用应该返回fetchAll的函数调用更新了我的帖子,但它显然不起作用。您的建议确实在函数外部起作用,但为什么会这样?@ClaudeGrecea您应该
从您的函数返回$res->fetchAll(PDO::FETCH_ASSOC)
。这很有效!你就是那个人!你能推荐一本关于PDO高级主题的书或网站吗?PHP.net在解释方面做得很差;它应该真正支持传入查询结果对象。
 object(PDOStatement)#22 (1) { 
  ["queryString"]=> string(236) "SELECT p.id,p.brag,p.brag_desc,p.brag_id,p.user_id, p.panel_id,p.domainurl,p.type,p.price FROM ruj_users_bg as p left join ruj_users as u on p.user_id=u.id WHERE u.status !=0 and 1 and p.status = 1 GROUP BY p.id DESC LIMIT 0 OFFSET 25" }
 $data = fetchData($limit_start,$page_records);

 function fetchData$limit_start,$page_records){
            $db = Core::getInstance();
            $sql = "SELECT id FROM ruj_users_bg WHERE
                   (type = :type3 OR type = :type4) 
                   AND status =:uno 
                   ORDER BY id DESC LIMIT :lim OFFSET :page";

    $res = $db->dbh->prepare($sql);
            $res->bindValue(':type3',3, PDO::PARAM_INT);                
            $res->bindValue(':type4',4, PDO::PARAM_INT);
            $res->bindValue(':uno',1, PDO::PARAM_INT);
            $res->bindValue(':lim',(int)$limit_start, PDO::PARAM_INT);
            $res->bindValue(':page',(int)$page_records, PDO::PARAM_INT);
    $res->execute();
        $res->fetchAll(PDO::FETCH_ASSOC);       

    return $res;

}           
$smarty->assign('results', $data->fetchAll(PDO::FETCH_ASSOC));