php在使用pdo时不会加载smarty

时间:2013-05-01 00:29:40

标签: php pdo smarty3

我有一个调用智能模板的php文件,它可以工作,并且所有变量都正确传递。不需要智能模板的php文件连接到数据库没有任何问题。问题:无论何时我输入PDO语句,页面都会加载为空白html而不是模板。

<?php
session_name('login');
session_start();

if(!isset($_SESSION['username'])){
    header("Location: login.php");
}

include(connect.php);

function getCats()
{       

    $cat = $db->prepare("SELECT * FROM `categories`");
    $cat->execute();
    $categories = $cat->fetchAll();
    return $categories; 
}

require('./Smarty-3.1.13/libs/Smarty.class.php');
$smarty = new Smarty;
$smarty->assign("catinfo", getCats());
$smarty->assign("pageType", "1");
$smarty->display('index.tpl');
?>  

处理此问题的智能模板部分如下所示。

{foreach from=$catinfo item='cat'}
    <div class="category">
     {foreach from=$cat item='info'}
            <div class="catAttribute">{$info}</div>
      {/foreach}

这是表中包含的内容:

CREATE TABLE `categories` (
`category`  VARCHAR(20),
`count` INT(10),
`message`   TEXT,
PRIMARY KEY(`category`)
);

1 个答案:

答案 0 :(得分:0)

function getCats()
{       
    $cat = $db->prepare("SELECT * FROM `categories`");
    $cat->execute();
    $categories = $cat->fetchAll();
    return $categories; 
}

$db变量尽管在外部作用域中声明,但在函数定义中是不可访问的。所以$db->prepare...会抛出错误,从那时起你的脚本就不起作用了。要解决此问题,您应该在尝试使用$db变量之前添加以下语句,从而在函数内部使用此变量。

global $db;

为了避免将来出现这种情况,您应该在代码前面加上以下内容,在开发脚本中保持错误报告的开启

ini_set('display_errors', 1);
error_reporting(E_ALL);

这将使PHP报告并显示在开发过程中非常有用的所有通知,警告和错误。您还可以使用像xdebug这样的调试器扩展,它通过回溯提供增强的错误报告(我认为是回溯)