PHP eval () код, возвращенный из запроса MySQL * не работает * - PullRequest
0 голосов
/ 19 октября 2011

если я возьму и сделаю что-то вроде этого:


    $p = 10;
    $n = 3;
    $evalstr = "\$f = 0.99 + ((.025 * \$p) * \$n);";
    eval($evalstr);
    echo $f;

У меня отображается 1.74, без ошибок все нормально, но когда у меня есть таблица mysql, которая содержит эти уравнения (для целей данного примера, это точно такое же уравнение) ... примерно так:


    $p = 10;
    $n = 3;
    while ($result = mysql_fetch_assoc($results)) {
        $math = $result['math'];
        //at this point $math = "\$f = 0.99 + ((.025 * \$p) * \$n);"
        eval($math);
    }

Я получаю ошибку Parse: синтаксическая ошибка, неожиданный T_VARIABLE, ожидающий T_STRING в ajax \ getprices.php (30): eval () 'd код в строке 1

Не знаю, почему, если я выведу echo $ math, оно идентично тому, что у меня было в качестве $ evalstr в первом примере.$ p и $ n фактически устанавливаются из переменных GET, но даже если я устанавливаю их вручную, как в примере, это не работает.

Ответы [ 2 ]

1 голос
/ 19 октября 2011

Мне кажется, что вы сохранили в базе данных выражение, включая экранированный $ .Вы можете попробовать, если это работает, если вы сначала удалите косую черту:

eval(stripslashes($math));

Я бы также рекомендовал быть очень осторожным с хранением такого кода в базе данных и использованием eval для выполненияЭто.Здесь есть потенциал для дыр в безопасности.Но я полагаю, вы это знаете.

0 голосов
/ 19 октября 2011

Я понял, кажется, что при определении eval-кода в качестве переменной мне нужно экранировать $, но при извлечении его из mysql в качестве переменной, он работает, если я удалю $

...