如何在PHP中多次包含文件?

时间:2011-06-21 19:12:03

标签: php

我有一个标准化的代码序列,我用它在主页和我网站上的其他页面上显示主题信息。我想把它放在一个包含文件中,这样我就不必再修复多个页面了。问题是有时这包括在while语句中发生,这意味着有一个先前的查询提供用于排序目的的信息。

当代码在while语句中是raw时,它可以正常工作,如果有多个id被提供给上一个查询的代码,它会显示多个结果。但是,如果此代码在include中,我只会看到一个结果。我假设因为包含文件只执行一次。我如何将包含文件作为我的原始代码等效?

包含

//outside query
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    $topic_id=htmlspecialchars( $row['topic_id'], ENT_NOQUOTES, 'UTF-8' );
    //code to display topics
    include('display_topics.php');  
}

原始代码

//outside query
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    //code to display topics
    $sql = "SELECT * FROM topic WHERE id=?";
    $stmt = $conn->prepare($sql);
    $stmt->bindValue(1,topic_id, PDO::PARAM_INT);
    $result=$stmt->execute();
}

while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    //yada yada
    ...
}

3 个答案:

答案 0 :(得分:12)

不要这样做。

最好是一个包含,并在其中声明一个function来满足您的需求:

function display_topics($topic_id)
 { 
   ....
 }

在循环中调用该函数,并将所有必要的数据传递给它。

答案 1 :(得分:1)

正常包含文件,但将重复的代码放在函数中。然后,在您希望添加代码的地方,只需调用该函数。

答案 2 :(得分:1)

这个词,我认为这不符合你的想法。

通常,include的使用不应该以这种方式使用。这就是上帝发明功能的原因(或Ada Byron,如果你不是神学上的倾向)。

请改为尝试:

function execute_row($row, $conn)
{
    $topic_id=htmlspecialchars( $row['topic_id'], ENT_NOQUOTES, 'UTF-8' );
    $sql = "SELECT * FROM topic WHERE id=?";
    $stmt = $conn->prepare($sql);
    $stmt->bindValue(1,topic_id, PDO::PARAM_INT);
    return $stmt->execute();
}

然后,在你的while语句中:

while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    $result = execute_row($row, $conn);
}

TADA!最好的部分是,它使您的代码更小,更易于阅读,并且解析速度更快。