在动态更新的页面上包含HTML的更好方法:php Include()还是MySQL数据库?

在动态更新的页面上包含HTML的更好方法:php Include()还是MySQL数据库?,php,Php,我有一个,根据通过$\u GET变量获得的用户选择,它会使用数据进行更新。下面两个选项中的哪一个是将数据加载到该中的更好方法 1.)phpinclude()类似于 <?php $problem_id = (int)$_GET['problem_id']; $table .= '<table>'; include('path/to/file/' . $problem_id . '.php'); //$problem_id.php would contain the <tr&

我有一个
,根据通过
$\u GET
变量获得的用户选择,它会使用数据进行更新。下面两个选项中的哪一个是将数据加载到该
中的更好方法

1.)php
include()
类似于

<?php
$problem_id = (int)$_GET['problem_id'];
$table .= '<table>';
include('path/to/file/' . $problem_id . '.php'); //$problem_id.php would contain the <tr>'s and <td>'s that go in the <table>.
$table.= '</table>';

echo $table;
?>
<?php
$problem_id = (int)$_GET['problem_id'];

/*
 Go to DB and get the entry which contains <tr>'s and <td>'s that
 go in the <table> and put it into the variable $table_content.
*/

$table = '<table>' . $table_content . '</table>';

echo $table;
?>

2.)使用MySQL数据库类似于

<?php
$problem_id = (int)$_GET['problem_id'];
$table .= '<table>';
include('path/to/file/' . $problem_id . '.php'); //$problem_id.php would contain the <tr>'s and <td>'s that go in the <table>.
$table.= '</table>';

echo $table;
?>
<?php
$problem_id = (int)$_GET['problem_id'];

/*
 Go to DB and get the entry which contains <tr>'s and <td>'s that
 go in the <table> and put it into the variable $table_content.
*/

$table = '<table>' . $table_content . '</table>';

echo $table;
?>

这里有明显的选择吗?这两种方法的优缺点是什么


谢谢。

根据我的经验,包含文件会更快,但您必须测试您的系统才能确定。以下是对同一主题的深入讨论:


我想说,这主要取决于文本的大小,以及您将拥有的文本数量

  • 如果您将有几十个(或数百个,甚至数千个)包含大量内容的大型复杂页面,那么
    include()。您还可以直接在文件系统上编辑它们

  • 如果您将拥有数千个(或更多)更简单的页面,那么使用数据库可能会更有效。另外,如果您想要索引和搜索它们,这将是一个好主意

作为一个相当任意的阈值,每个文件将占用至少4KB的空间,因此如果它们的内容少于此值,则可能会浪费空间

在这两种情况下,您都希望为创建大量内容的人提供滥用保护

  • 基于文件系统的查询很容易受到我的攻击,发送的查询形式为
    problem\u id=../../../../../passwords.php
    ,如果人们自己会产生问题,那么您的文件系统也会被吃掉
  • 基于数据库的应用程序可能容易受到SQL注入等攻击,但在现有的解决方案中可能存在更多的问题


最后,有些文件系统被实现为数据库,有些数据库被实现为文件系统。他们其实没什么不同;它们只是针对不同的事情进行了优化。

您必须根据每个选项的好坏做出决定

DB选项

好的一面——如果您正在使用版本控制(例如,
git
)您必须允许
管理员
修改
管理面板
中的
html
模板,那么对您来说最好的选择是DB,因为在文件存储的情况下,如果文件在服务器上通过
管理面板
git
同时进行修改,那么您将拥有服务器更新期间的冲突

坏的一面--
1)您必须执行更多操作才能从数据库中获取它,然后显示在文件中<代码>2)当模板存储在db中时,数据库上会有额外的负载,以后如果遇到性能优化问题,则必须实现文件缓存

文件选项

好的一面--1)开发人员可以轻松地在他们的
IDE编辑器(例如eclipse)
上修改html模板,然后在db或管理面板中进行修改<代码>2)文件include的匹配速度更快,在代码中所需的操作也更少,然后是DB(通常如果您没有特定的案例)<代码>3)无需实现文件缓存,因为它已存储在文件中


不好的一面——1)正如我上面提到的,如果您在
admin
中修改模板,并且
git
同时
MySQL对我来说是一个明显的选择,那么您将遇到
git
的问题。动态包含一堆PHP文档会使服务器变得混乱。问题是您真的想输入或生成新的表数据吗?您可以动态创建所有内容,然后将其插入数据库。

如果是动态内容,您的最佳选择是HTML5+jQuery Ajax+PHP+Db的组合

在html页面中,您可以有如下代码:

<table>
    <!-- table head -->
    <thead>
        <tr>
            <th>Col #1</th>
            <th>Col #2</th>
            <th>Col #3</th>
        </tr>
    </thead>
    <!-- result set -->
    <tbody id="results">
    </tbody>
</table>

第1列
第2列
第3栏

您可以使用“Jquery Ajax”异步请求服务器数据,并填充空表(本例中为#results)。此应用程序是一个连接到DB的文件“PHP”(它可以是任何DB引擎或MySQL数据库)。

感谢您的链接。我更关注这里的最佳实践,而不仅仅是最快的。还有其他想法吗?视情况而定,没有理由不能同时使用这两种方法。您的数据位于文件还是数据库中?我的假设是某种数据库。您可以使用php命令从数据库检索数据,并使用生成的数组填充表数组,而不是存储表结构。@hoss:实际上,“数据”是标记中的所有HTML(s、s、文本、图像、格式化HTML、内联CSS等)。目前它存储在MySQL中,使用“longtext”作为列结构。我正处于这个项目的开始阶段,所以我现在有机会用相对较少的工作量进行更改。$problem_id的数字是否固定?或者它是否倾向于更改?如果它固定了多少?是否也有基于$problem_id的更新删除场景?哪些页面,如何创建新页面。它们是否需要由非程序员编辑。为什么您要存储完整的页面,而不仅仅是数据,您可以在每次请求页面时构建页面。请提供mroe信息,特别是如果你想得到赏金的注意。@TobyAllen:“页面”是动态生成的HTML内容。基本上,我会生成一道数学题(所有的格式都很好),然后保存HTML。我将是唯一一个访问/编辑它们的人。我最终肯定会有成千上万的“条目”,这些条目可能会