1

我无法弄清楚上面的错误。有没有人见过这个。我将 PHP 与 Smarty 一起使用,并将 PDO 合并到我的代码中。

PHP var_dump 代码 $data$smarty->assign("results", $data);

 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" }

来自 Smarty 模板的 PHP 错误:

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

Smarty 模板的第 25 行:

$_smarty_tpl->tpl_vars['smarty']->value['section']['res']['loop'] = is_array($_loop=$_smarty_tpl->getVariable('results')->value) ?计数($_loop):最大值(0,(int)$_loop);未设置($_loop);

不知道问题出在哪里。非常感谢您的帮助。

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

 $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;

}           
4

2 回答 2

2

那是因为PDOStatementis 严格来说不是数组类型。虽然它实现Traversable了,所以我很惊讶 Smarty 不接受它作为可以循环的东西。

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

$smarty->assign('results', $data->fetchAll(PDO::FETCH_ASSOC));
于 2012-12-14T06:36:11.817 回答
-1

错误消息非常不言自明 -$data变量包含与您期望的不同的内容。
似乎您将整个 PDO 对象传递给模板,而不是先获取某些特定值。

我建议在没有 Smarty 或其他任何东西的情况下单独使用 PDO 玩一段时间,以熟悉它并学习如何获得所需的值。
或者至少var_dump()在分配之前检查您的值。

于 2012-12-14T06:36:54.933 回答