php - 使用存储在 mysql 数据库中的 if 语句

标签 php mysql

我正在做一些需要在 mysql 数据库中存储 if 语句的地方。我需要提取这些语句并使用它们,每个语句都是我正在测试的一种算法。我知道您可以将 if 语句存储在变量中,例如“$abc = $x > 1 && $f == 1;”如果你运行 if($abc) {} 它会工作,我想我可以在这里做同样的事情,但是当我运行 if($abc) 并且 $abc 是来自数据库的 if 语句时它不起作用,它正在运行if 语句中的代码,因为 $abc 存在。代码如下...

$getAlgorithms = mysqli_query($mysql_connect, "SELECT * FROM `algorithms2`");
 while($algorithms = mysqli_fetch_array($getAlgorithms)) {
  $algorithmID = $algorithms['id'];
  $algorithm = $algorithms['algorithm'];
   if($algorithm) { 
    echo("HELLO WORLD");
   }  
}

$algorithms['algorithm']; 的虚拟例子会拉: $r >= $var_x && $z <= $var_y && $lz >= $var_c

非常感谢您的帮助,这非常重要。如果您有任何问题,请提出。

注意:这是一个 100% 的内部平台

最佳答案

您的代码需要使用 eval() 才能按原样工作:

$getAlgorithms = mysqli_query($mysql_connect, "SELECT * FROM `algorithms2`");
 while($algorithms = mysqli_fetch_array($getAlgorithms)) {
  $algorithmID = $algorithms['id'];
  $algorithm = $algorithms['algorithm'];
   if(eval("return {$algorithm};")) { 
    echo("HELLO WORLD");
   }  
}

但是,从外部源(数据库)执行任意代码可能会带来可怕的安全风险:只是因为您期望 $algorithm 是一种良性算法表达式并不意味着它不能是恶意函数调用或其他语句,例如,如果有人可以将 system('rm -rf/') 作为算法输入到您的数据库中,那么您你可能会有糟糕的一天。

在不知道您要解决的确切问题的情况下,很难提出更好的解决方案,但我更愿意将“算法”放在代码中的数组或其他硬编码数据结构中,而不是数据库,它更安全,因为任何可以更改该列表的人都可以执行任意代码。

进一步引用:http://php.net/manual/en/function.eval.php

关于php - 使用存储在 mysql 数据库中的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32152000/

相关文章:

php - 在 php 中进行循环时没有获取所有必要的数据

mysql - 选择查询锁定innodb表

mysql - 根据最后一个条目获取列值(非空)

javascript - CORS、通过 vagrant 的 nginx,以及通过 browsersync 提供服务的站点

php - 使用 PHP 管理多个网页

javascript - 数据表激活单单元格编辑onclick

php mysql,变量帮助查询帮助

PHP和MYSQL DB设计: using a column vs another table

MySQL - 级联更新有效,但级联删除无效

PHP 多输入搜索