1

上記のエラーがわかりません。誰もこれを見たことがありますか。PHP を Smarty で使用しており、PDO をコードに組み込んでいます。

コード $data の PHP var_dump$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) ? count($_loop) : max(0, (int)$_loop); unset($_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

これPDOStatementは、厳密には配列型ではないためです。しかし、それは実装され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 に答える