-1

我有一个调用 smarty 模板的 php 文件,它可以正常工作并且所有变量都正确传递。不需要 smarty 模板的 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');
?>  

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

{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`)
);
4

1 回答 1

1
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,它提供带有回溯的增强错误报告(回溯,我认为)

于 2013-05-01T00:59:48.700 回答