2011-10-18 21 views
0

如果我參加,做這樣的事情:PHP的eval()代碼的MySQL查詢返回的*不工作*


    $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); 
    } 

我得到解析錯誤:語法錯誤,意想不到的T_VARIABLE,預計在阿賈克斯T_STRING \ getprices。 php(30):eval()'代碼在線1

不確定爲什麼,如果我打印的echo $ math與第一個示例中的$ evalstr相同。 $ p和$ n實際上是從GET變量中設置的,但即使我手動設置它們(如在示例中它不起作用)。

+3

建議時。儘量不要將您的PHP存儲在數據庫中。如果你有一個sql注入漏洞,有人可能會完全損害你的整個代碼庫。不只是你的數據庫。 – Cyclone

+0

http://ideone.com/T20A4你確定$數學真的是你說的嗎? –

+0

嘗試用'var_dump($ math)'替換'eval()'並告訴我們_exactly_它打印出來的內容。 –

回答

1

在我看來,你在數據庫中存儲了表達式,包括轉義的$。你可以嘗試,如果它的工作原理,如果先取出的斜線:

eval(stripslashes($math)); 

我也建議要非常小心,在數據庫中存儲這樣的代碼,並使用EVAL來執行它。這裏有潛在的安全漏洞。但我認爲,你知道這一點。

+0

這個工作,同樣的答案我想出了,我手動刪除斜槓(只有18個方程)和安全沒有問題在這裏,謝謝 –

0

我得到了它,似乎定義的eval代碼作爲一個變量我必須逃脫$,但是從MySQL拉時,它作爲一個變量它的工作原理,如果我未逸出的$