我有一个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;
}
?>
任何人都可以看一下,谢谢你之前的
答案 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";
}