我有一个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;
}
?>
任何人都可以调查一下吗,谢谢之前
如果您使用的是与上述相同的示例代码,则只需返回$checkstatus值。
$var1 = 2;
$var2 = 3;
if ($var1 > $var2){
$checkStatus = true;
} else {
$checkStatus = false;
}
return $checkStatus;
你能把条件放吗?
通常
如果
$str = '<?php echo "test"; ?>';
echo eval('?>'.$str);
将打印"测试",从而评估表达式。检查这是否适合您,否则放置您正在评估的条件。
试试这样的事情
$var1 = 1;
$var2 = 3;
$conditionCheck = '$var1 > $var2';
$checkStatus = eval( "return $conditionCheck;");
if ($checkStatus) {
echo "greater";
} else {
echo "less";
}
你不能不执行直接存储在数据库中的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;