从mysql查询返回的PHP eval()代码*无法正常工作*

时间:2011-10-18 22:42:39

标签: php mysql eval

如果我采取并做这样的事情:


    $p = 10;
    $n = 3;
    $evalstr = "\$f = 0.99 + ((.025 * \$p) * \$n);";
    eval($evalstr);
    echo $f;

我显示1.74,没有错误一切都很好,但是当我有一个包含这些方程式的mysql表时(为了这个例子的目的,它是完全相同的方程式)......就像这样:


    $p = 10;
    $n = 3;
    while ($result = mysql_fetch_assoc($results)) {
        $math = $result['math'];
        //at this point $math = "\$f = 0.99 + ((.025 * \$p) * \$n);"
        eval($math);
    }

我得到Parse错误:语法错误,意外的T_VARIABLE,期待ajax \ getprices.php(30)中的T_STRING:第1行的eval()代码

不确定为什么,如果我打印echo $ math,它与我在第一个例子中的$ evalstr相同。 $ p和$ n实际上是从GET变量设置的,但即使我按照示例手动设置它们也不起作用。

2 个答案:

答案 0 :(得分:1)

在我看来,您在数据库中存储了包含转义的 $ 的表达式。您可以尝试,如果它有效,如果您首先删除斜杠:

eval(stripslashes($math));

我也建议在将这些代码存储在数据库中并使用 eval 执行它时要非常小心。这里存在安全漏洞的可能性。但我想,你知道这一点。

答案 1 :(得分:0)

我明白了,似乎在将eval代码定义为变量时我必须逃避$但是当它从mysql中作为变量拉出它时它会工作,如果我unescape $