Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中从数据库调用函数_Php_Eval - Fatal编程技术网

在PHP中从数据库调用函数

在PHP中从数据库调用函数,php,eval,Php,Eval,我有这样一个要求,即我必须在数据库列中有一个函数签名作为值。所以我需要做的是得到那个值,然后在代码中调用函数。例如……假设我在数据库中有一个名为“Signature”的列,其值为SendMail();。我需要能够获取返回值,然后将其存储在另一个表中。问题是,当我在$I['Signature']上使用eval函数时,函数被调用,但我无法获得返回值。我做错了什么?下面是一个例子: $query = "SELECT signature FROM tbl WHERE id = 1 "; $signatu

我有这样一个要求,即我必须在数据库列中有一个函数签名作为值。所以我需要做的是得到那个值,然后在代码中调用函数。例如……假设我在数据库中有一个名为“Signature”的列,其值为SendMail();。我需要能够获取返回值,然后将其存储在另一个表中。问题是,当我在$I['Signature']上使用eval函数时,函数被调用,但我无法获得返回值。我做错了什么?下面是一个例子:

$query = "SELECT signature FROM tbl WHERE id = 1 ";
$signature = mysql_query($query);
while ($i = mysql_fetch_array($signature)){
   //Here the function is being called properly but I can't get the return value.
   $email= eval($i['Signature']);
   if(mysql_num_rows($i) == 0){
      //insert the returned value into another table.
      $insertString = "INSERT INTO tbl (email) VALUES ('$email')";
   }
}

function SendMail()
{
   $email= 'Have a great day'
   return $email;
}
此外,我肯定会得到一些“eval是邪恶的”评论,所以如果有更好的方法,请建议

因此,您应该添加
return

$email= eval('return ' . $i['Signature']);
或者:

eval('$email = '  . $i['Signature']);

因此,您应该添加
return

$email= eval('return ' . $i['Signature']);
或者:

eval('$email = '  . $i['Signature']);

最好将函数名作为字符串存储在一列中,将要传递给函数的参数作为序列化数组存储在另一列中。然后,您可以使用从函数中获取返回值,而无需使用
eval()

您最好将函数名作为字符串存储在一列中,将要传递给函数的参数作为序列化数组存储在另一列中。然后,您可以使用从函数中获取返回值,而无需使用
eval()

我来试一试。我刚刚读了那份声明,但没有完全理解。我会试一试的。我只是读了那句话,但没有完全理解。如果你必须坚持使用eval,至少先检查签名栏的内容是否确实有效。可能通过
函数\u exists
函数:如果必须坚持eval,至少首先检查签名列的内容是否确实有效。可能通过
函数存在
函数:有趣。我来试一试,很有趣。我来试一试。