2014-06-08 3 views
0

데이터베이스에 저장된 쿼리를 가져 오는 데 어려움이 있습니다. 내 프로젝트에서 데이터베이스에 mysql 업데이트 쿼리를 저장하고 다른 작업이 다른 페이지에서 실행될 때 해당 쿼리를 가져와 내 함수를 통해 전달하고 실행합니다. 그러나 그것을 비운 후에. 아래는 지금까지 내가 한 일이다. 이 데이터베이스데이터베이스에 저장된 쿼리 얻기 mysql

$tosave = addslashes(serialize($query)); 
$sql = "INSERT INTO trans (saved_query) VALUES ($tosave)"; 

에 저장 될 수 있도록

데이터베이스

$query = array(); 
$query['approved'] = "UPDATE payment SET pm_status = 'Approved' WHERE id = '69'"; 
$query['approved2'] = "UPDATE member SET pay_date = NOW())"; 

에서 쿼리를 저장 // 나는 데이터베이스에 $ tosave을 저장 덴 // 직렬화하고 addslashes 덴 // , 나는 그것을 확인하고 구원 받았다. 내가 그것을 사용하고자하는 페이지에서 는, 내가 가치와 때 unserialize을받을 때마다, 그것은 행

$toprocess = unserialize($query['saved_query']); 
echo $toprocess['approved']; 

내가 그것을 실행할 때 빈 값을 반환하고 값을 선택한 후 비어 예를 반환 쿼리가 실행되지 않습니다.

하지만 난 일렬 화를 푸는 않고 직접 에코 경우 내가 여기서 뭔가를 놓치고 넣다, 그것은

echo $query['saved_query']; 

Pls는 도움의 값을 dispplays. 감사합니다

나는 SQL 주입을 막고 있지 않습니다. 나는 이미 그것을 몰랐다. 난 그냥 데이터베이스에 저장된 SQL을 실행하고 싶습니다. 이것은 mysql 인젝션 예방에 대한 답변과 다릅니다. 감사합니다

+0

문자열을 올바르게 인코딩하여 데이터베이스에 삽입 할 수 있도록하고 문자열을 꺼낼 때 문자열을 동일하게 유지하는 방법에 대해 알아야합니다. 많은 PHP 사용자들이 그렇게 오래 걸리지 않기 때문에 PHP에서 안전하게 데이터를 저장하는 프로세스를 "SQL 주입 방지"라고합니다. 문자열을 데이터베이스에 안전하게 저장하고 안전하게 가져 오는 경우'serialize'와'unserialize'도 작동합니다. 추가 제안은 전송시 문자 인코딩 문제를 방지하기 위해 serialize 된 데이터를 base64로 인코딩하는 것입니다. – hakre

+0

비 직렬화 후 값이 비어 있습니다 –

+0

내 의견에 의해 명확하지 않은 경우 죄송합니다. 여기에 SQL 주입이 있지만 우연히 발생합니다. 당신은 SQL 인젝션으로 그것을 알아 차리지 못했지만, 기술적으로 그것은 하나입니다. SQL 인젝션을 성공적으로 막는다면, 다시 작동하도록 값을 serialize/unserialize하십시오. 그 외에도, 귀하의 질문에 대한 대답은 : 적절하게 만들어진 삽입 문을 사용하여 값을 입력하십시오. – hakre

답변

0

와 별도의 브라켓() 기능은 지금이 쿼리

$query['approved2'] = "UPDATE member SET pay_date = NOW())"; 

에 오류가 있습니다.

+0

문제는 데이터로 저장된 SQL 쿼리의 오류가 아니지만 먼저 정확한 문자열을 유지하는 SQL 쿼리를 실행하는 방법입니다. – hakre

관련 문제