Вызов функции из базы данных в PHP - PullRequest
0 голосов
/ 15 октября 2011

У меня есть это требование, которое гласит, что я должен иметь сигнатуру функции в качестве значения в столбце базы данных. Итак, мне нужно получить это значение, которое затем вызовет функцию в коде. Например .... скажем, у меня есть столбец в базе данных с именем "Подпись", который имеет значение SendMail () ;. Мне нужно иметь возможность получить возвращаемое значение и затем сохранить его в другой таблице. Проблема в том, что когда я использую функцию eval в $ i ['Signature'], функция вызывается, но я не могу получить возвращаемое значение. Что я делаю неправильно? Вот пример:

$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 is evil", поэтому, если есть лучший способ, пожалуйста, сообщите.

Ответы [ 2 ]

3 голосов
/ 15 октября 2011

из документов

eval() returns NULL unless return is called in the evaluated code, in which case the value passed to return is returned. 

Поэтому вы должны добавить return:

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

альтернативно:

eval('$email = '  . $i['Signature']);
1 голос
/ 15 октября 2011

Было бы лучше сохранить имя функции в виде строки в одном столбце и аргументы для передачи функции в виде сериализованного массива в другом столбце. Тогда вы можете использовать call_user_func, чтобы получить возвращаемое значение из функции без использования eval()

...