在数据库中插入PHP代码

时间:2014-02-10 21:01:59

标签: php mysql

我在动态页面中包含的文件中有一系列文章。我想删除所有文件并将内容放在数据库中。

但是,有些文章包含PHP代码。我很惊讶在最近的一个帖子上学到了你可以将PHP代码放在MySQL数据库表中。但是,我忘了问怎么做。有人可以告诉我如何修改以下文本(包括回显值和包含),以便它可以存储在数据库表中吗?

<p>Mammals and reptiles evolved from a common ancestor.</p>
<h3><a name="Internal" id="Internal"></a><?php echo $EvoHeader; ?></h3>
<?php require_once($BaseINC."/AContent/Child/Life/Features/Classification/Order/Mammals.php"); ?>
<p>Evolution continues today.</p>

3 个答案:

答案 0 :(得分:3)

就数据库而言,PHP代码只是普通文本。

问题不在于它采用某种特殊格式,而是正确地转义它。最好的方法是通过MySQLi或PDO使用预准备语句。您也可以使用mysqli_real_escape_string()。

编辑:根据您的评论,您听起来像是在做这样的事情:从数据库中获取代码,然后echo。你是对的,这将导致它作为文本输出。您必须使用eval()或其他内容执行它,这是非常坏主意。正如其他人所指出的,这不是存储PHP代码的理想方式;它很难维护,打开一些安全问题,可能会导致命名冲突,并且通常会引入比解决更多的麻烦。

答案 1 :(得分:3)

我看到没有人解决如何运行一旦你获取它的代码,但只讨论如何逃避它等等...我不认为OP需要PHP代码片段来显示它们页面,但要运行它们。

如果要在从数据库中获取PHP代码后运行它,可以使用eval。但我强烈建议你不要这样做。有数百万篇关于它的文章以及为什么它不安全。所以,除非你110%确定你知道自己在做什么,否则不要这样做。

但是,由于我怀疑你需要动态代码中的动态代码,我建议你将每个页面的渲染版本放入数据库中。这意味着你获取每个文件的输出,包括那些输出的php行(包括它们的回声和包含),并将它们全部存储在一起。如果你仍然需要一些动态代码(比如可能是已记录的用户名,或当前日期等),我建议你在从数据库中获取数据后添加那些,通过设置标志,制作例外,无论如何。

底线:使用您的数据库进行内容,设置等... 不要使用它来运行代码,即使有办法实现。

关于eval的好答案:When is eval evil in php?

您可能还会发现此主题很有趣(无论是关于Drupal):https://drupal.stackexchange.com/questions/70297/php-in-database-bad-practice-but

答案 2 :(得分:2)

如果我们忘记php代码只是一个文本,并且你只是不想将普通的PHP代码保存到数据库中,你可以先serialize你的php代码,然后将它插入你的数据库。在将来从数据库中获取php代码时,您可以unserialize