2011-10-18 2 views
0

작동하지 * MySQL의 쿼리에서 반환, 오류 모든 것을 잘되지 않습니다 내가 표시 1.74를 얻을PHP의 평가() 코드는 내가 받아 같은 것을 할 경우 *


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

을,하지만 난 MySQL의 테이블이있을 때 그과 같이 ...이 식을 (이 예제의 목적을 위해, 그것은 동일한 방정식) 보유 : \ 아약스에 getprices을 T_STRING 기대, 구문 오류, 예기치 T_VARIABLE :


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

내가 구문 분석 오류가 발생합니다. PHP (30) : 라인 1의 eval() '코드

확실하지 않은 이유는, echo $ math를 출력하면 첫 번째 예제에서 $ evalstr과 동일한 것입니다. $ p와 $ n은 실제로 GET 변수에서 설정되지만 예제처럼 수동으로 설정하더라도 작동하지 않습니다.

+3

제안을 언 이스케이프 경우가 작동하는 변수로 평가 코드를 정의 할 때 – Cyclone

+0

http://ideone.com/T20A4 당신은 $ 수학이 정말로 당신이 말하는 것을 확신합니까? –

+0

'eval()'을'var_dump ($ math)'로 대체하고 출력 내용을 정확하게 알려주십시오. –

답변

1

데이터베이스에 이스케이프 처리 된 $을 포함한 표현식을 저장 한 것으로 보입니다. 작동하는지 먼저 슬래시를 제거하면 당신은 시도 할 수 있습니다 :

eval(stripslashes($math)); 

나도 데이터베이스에 같은 코드를 저장하고 실행하는 평가를 사용하여 매우 조심하는 것이 좋습니다 것입니다. 보안 구멍이 생길 가능성이 있습니다. 그러나 나는 이것을 알고 있습니다. 나는 $를 탈출해야하지만 변수로 MySQL의에서 잡아 당겨 때 내가 $

+0

이것이 작동합니까, 같은 대답을 생각해 냈습니다. 수동으로 슬래시를 제거하고 있습니다 (18 개 방정식 만 가능). 보안은 아무런 문제가 없습니다. 감사합니다. –

0

내가 그것을있어 보인다. PHP를 데이터베이스에 저장하지 마십시오. SQL 인젝션 취약점이있는 경우 누군가 전체 코드베이스를 완전히 손상시킬 수 있습니다. 데이터베이스 뿐만이 아닙니다.
관련 문제