我无法弄清楚上面的错误。谁看过这个吗。我正在使用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错误:
注意:第25行的/var/www/vhosts/somesite.com/httpdocs/templates_c/3d14690fd8419657273a6dce45bbca85dfc1e261.file.bragsdata.tpl.php中无法将PDOStatement类的对象转换为int
Smarty模板第25行:
$ _ smarty_tpl-> tpl_vars ['smarty'] - > value ['section'] ['res'] ['loop'] = is_array($ _ loop = $ _ smarty_tpl-> getVariable('results') - >值)? count($ _ loop):max(0,(int)$ _ 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;
}
答案 0 :(得分:2)
那是因为PDOStatement
严格来说不是数组类型。它实现了Traversable
,所以我很惊讶Smarty不接受它作为可以循环的东西。
要将数据库结果转换为标准数组,您必须使用->fetchAll()
:
$smarty->assign('results', $data->fetchAll(PDO::FETCH_ASSOC));
答案 1 :(得分:-1)
错误信息非常明显 - $data
变量包含的内容与您的预期不同
您似乎将整个PDO对象传递到模板中,而不是首先获取某个特定值。
我建议在没有Smarty或任何东西的情况下单独使用PDO玩一段时间,熟悉它并学习如何获得所需的值。
或者至少在分配之前使用var_dump()
检查您的值。