2012-02-01 1 views
0

, 내가 다음에 바라고 :mysql_real_escape_string charset을 수동으로 지정하므로 db 연결이 필요하지 않습니다 - 가능합니까? mysql_real_escape_string를 다양한 문자열을 탈출 활성 MySQL의 연결이 필요한 이유를 이해하면서

방식으로 어떤 종류의 수동 (어, 여기 용어는 아마도 '정적'올바른 용어 것)하기 mysql_real_escape_string을 실행하기 위해 활성 db 연결이 필요하지 않도록 charset을 mysql_real_escape_string으로 푸시한다. 우리가 활성 연결없이 mysql_real_escape_string를 할 왜 어떤 사람들로

을 요청할 수 있습니다, 추론은 간단하다 : 그래서

a) construct query (this is where the mysql_real_escape_string takes place) 
b) create hash (md5, md4, sha1, crc32, choose your poison) from said query 
c) check cache (memcached) for hash created in step b 
d) query cached in memcached -> return cached results -> terminate script 
c) query NOT cached in memcached -> connect to mysql -> cache result to memcached + return result 

쿼리의 해시가 이전에 만들어지기 때문에 당신이 위의와 함께 볼 수 필요한 경우 캐쉬 검사/db 연결 ... db 연결이 이루어지기 전에 mysql_real_escape_string이 발생합니다.

이 목표의 전체적인 목표는 단지 ​​캐시 히트에서 '전체 페이지 요청'을 실행할 수 있다면 mysqld에 연결할 필요가 없다는 것입니다. 기간.

우리가 지금 가지고있는 것은 mysql_real_escape_string이 실행할 수 있도록 db 연결이 이루어지는 대규모 요청 집합입니다. 이 솔기는 불필요합니다.

그래서, 요약 : DB를 연결하지 않고 (그것은 100 % 안전 할 필요가 있으므로, POST 및 값을 GET)

우리 안전하게 MySQL의 문자열을 탈출 할 수있는 방법으로해야합니다.

감사합니다.

답변

1

나는 다른 방법을 건의 할 것입니다. 쿼리는 매번 같을 것입니다.

+0

우리는이 대답을 사용하지는 않았지만, 이것을 할 수있는 유일한 방법은 (우리가 볼 수있는 것에서)입니다. mysql_real_escape_string을 실행하여 mysql_real_escape_string 이전에 쿼리를 해쉬 할 필요가있는 코드의 로직을 변경하면 mysql_real_escape_string을 모두 함께 피하고 db 연결을 피할 수있는 유일한 방법이다. 감사. –

-2

mysql_real_escape_string()을 사용하기 전에 MySQL 연결이 필요합니다. 그렇지 않으면, 레벨 E_WARNING의 오류가 생성되고 FALSE가 반환됩니다. link_identifier가 정의되어 있지 않으면 마지막 MySQL 연결이 사용됩니다.

php.net 설명서 웹 사이트에서.

function search(array $params) { 
    $cacheKey = md5(serialize($params)); 

    ... search cache ... 

} 

당신은 쿼리에 해시를 실행할 필요가 없습니다, 당신은 그냥 제공된 매개 변수를 실행할 수 있습니다

+0

는 http://us.php.net/mysql_real_escape_string "A MySQL의 연결이 그렇지 않으면 E_WARNING 등급의 에러가 발생()는 mysql_real_escape_string를 사용하기 전에 필요한 참조하시기 바랍니다, 그리고 FALSE가 반환됩니다. link_identifier가 정의되지 않으면, 마지막 MySQL 연결이 사용됩니다. " –

관련 문제