我有一个标准化的代码序列,我用它在主页和我网站上的其他页面上显示主题信息。我想把它放在一个包含文件中,这样我就不必再修复多个页面了。问题是有时这包括在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
...
}
答案 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!最好的部分是,它使您的代码更小,更易于阅读,并且解析速度更快。