PHP:从数据库获取PHP代码并仅在条件下在php文件中运行

时间:2016-03-10 06:49:25

标签: php mysql

我有一个php文件,它查询并运行从每行获取的元素的函数('somefunction')。

现在问题是我有一个新列,它指定了sql的条件,根据这个条件,我们必须决定是否运行这个函数。

条件有一个PHP代码,必须执行,下面给出了样本

<?php   

     $sqlString = 'select * from s_tables';
        $result = mysql_query($sqlString);
        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
             $functionName = $row["functionName"];//pre-defined functions inside my php file
             $conditionToCheck = $row["conditionToCheck"];//newly added one, will return a piece of php code
             $stylesToAffect = $row["elementToAffect"];//say html elements H1,H2,P
             if ($conditionToCheck){
                //need to evaluate code which i got from query
                $checkStatus = eval($conditionToCheck);//this is not working
             }

             if ($checkStatus){
                  //this function runs perfectly 
                  if (method_exists($this, $functionName)){
                       $this->$functionName($stylesToAffect);
                  }
             }
        }


        //just for a sample 'conditionToCheck' look like
        $var1 = 2;
        $var2 = 3;
        if ($var1 > $var2){
            $checkStatus = true;
        }else{
            $checkStatus = false;
        }

?>

任何人都可以看一下,谢谢你之前的

4 个答案:

答案 0 :(得分:1)

如果您使用的是与您提到的相同的示例代码,则只需要返回$ checkstatus值。

$var1 = 2;
$var2 = 3;
if ($var1 > $var2){
    $checkStatus = true;
} else {
    $checkStatus = false;
}
return $checkStatus;

答案 1 :(得分:0)

你不能直接执行存储在数据库中的php代码。如果您希望这样做,那么您可以使用eval()

但如果考虑到此类实施的潜在安全威胁,您可能不想使用它。

我建议你不要使用eval(),就像你成为sql注射的猎物一样,这会对你造成更多伤害。

更新(阅读评论后):

在您的情况下,您可能希望使用call_user_func(),因此您的示例就像call_user_func($funtionName, $paramsIfAny);eval($conditionsToCheck)

同时检查你的条件代码,你没有返回/回应任何东西,所以你的代码就像(如@ ravindra-bhalothia所述):

$var1 = 2;
$var2 = 3;
if ($var1 > $var2){
    $checkStatus = true;
} else {
    $checkStatus = false;
}
return $checkStatus;

答案 2 :(得分:0)

你能把条件?

通常

如果

$str =  '<?php echo "test"; ?>';

echo eval('?>'.$str);

将打印“test”,从而评估表达式。检查这是否适合您,否则请考虑您正在评估的条件。

答案 3 :(得分:0)

尝试这样的事情

$var1 = 1;
$var2 = 3;
$conditionCheck = '$var1 > $var2';
$checkStatus = eval( "return $conditionCheck;");
if ($checkStatus) {
    echo "greater";
} else {
    echo "less";
}