我有一个调用智能模板的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`)
);
答案 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
这样的调试器扩展,它通过回溯提供增强的错误报告(我认为是回溯)