如何从mysql记录中返回php代码?

如何从mysql记录中返回php代码?,php,mysql,sql,ob-get-contents,Php,Mysql,Sql,Ob Get Contents,如何从mysql行“content”记录返回php代码,其中可能只包含纯文本,如: 你好 或/和php类似: 让我们试试php: 当它只包含纯文本时没有大小写速度性能 下面是一个例子,它使用include()返回php,但在本例中,它不是我所要求的(我所要求的是php的所有内容都来自mysql) mysql记录: +---------------+ | id | content | |---------------| | 0 | test.php | +---------------+

如何从mysql行“content”记录返回php代码,其中可能只包含纯文本,如:

你好

或/和php类似:

让我们试试php:

当它只包含纯文本时没有大小写速度性能


下面是一个例子,它使用include()返回php,但在本例中,它不是我所要求的(我所要求的是php的所有内容都来自mysql)

mysql记录:

+---------------+
| id |  content |
|---------------|
|  0 | test.php |
+---------------+
test.php内容

正在尝试通过include()从mysql返回php:


尝试评估记录的内容:
eval($row['content'])

补充:您的案例中有一个混合的html+php代码,这意味着您需要使用一个结束php标记来离开php模式,因此在您的特定案例中,这可能如下所示:

eval( '?>'. $row['content'] .'<?php ' );

eval(“?>”.$row['content']”.数据库中的PHP代码很糟糕,但我以前遇到过必须这样做的情况,因为我的雇主不允许我以避免这种情况的方式重写系统,所以这里是我们使用的解决方案的通用版本:

$string = 'this <?php echo "is not"; ?> cool';

function exec_php($php_string) {
    return preg_replace_callback(
        '/<\?(?:php)?(.*)\?>/m',
        'exec_php_embed',
        $string
    );
}

function exec_php_embed(array $args) {
    if (count($args) != 2) {
        return '';
    }
    list(,$code) = $args;
    ob_start();
    eval($code);
    return ob_get_clean();
}

因此,您的字段中有PHP代码和纯文本,但您想提取(并使用?)PHP内容?@Jonathan Sampson-他们都喜欢PHP操作。例如
Hello!
将返回
Hello!
@yes123-这不符合标准。主要的想法是问题。@Binyamin@Karolis提供(使用
eval()
在内容上),但在这样做时请非常小心。这通常是不赞成的。如果你在下一行重复它,你为什么要这样做?@Binyamin:当eval()是答案时,你问的问题是错误的。在这种情况下,Karolis是正确的:你必须eval()你的代码可以实现你想要的结果。但是,你的设计需要固定。将代码存储在数据库中并任意执行该代码是不安全和低效的。有时你被束缚在一个系统上,不能按照你喜欢的方式做事情。通常,这是雇主的意愿,除非你签了自己的工资单,否则你通常会被解雇无法绕过此问题。是否有任何安全的方法可以做到这一点,如使用不带eval()的模板样式{{content\u id,current\u time}}?@Binyamin(1)实际上,这种方式并不是不安全的。在我看来,关于eval和安全性的争论被夸大了。我认为,就像往常一样,一切都只取决于特定的应用程序设计。函数本身与安全性无关。所有的安全性都取决于你如何处理传递给这个函数的参数。(2)您可以创建一个函数
get\u content(content\u id,current\u time)
。在这个函数中,对参数进行严格的验证并运行
eval()
。然后,无论何时您需要在代码中使用
eval()
,都可以使用
get\u content()
$string = 'this <?php echo "is not"; ?> cool';

function exec_php($php_string) {
    return preg_replace_callback(
        '/<\?(?:php)?(.*)\?>/m',
        'exec_php_embed',
        $string
    );
}

function exec_php_embed(array $args) {
    if (count($args) != 2) {
        return '';
    }
    list(,$code) = $args;
    ob_start();
    eval($code);
    return ob_get_clean();
}
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.