2011-11-16 2 views
2

저는 종종 하나씩 입력을 피하고 두 가지 방법의 차이점에 대해 궁금합니다. 어느 것이 더 일반적인 관행인가? 나는 "escape requires"필드를 먼저 이스케이프 처리 한 다음 각 값에 대해 긴 이스케이프 코드를 작성합니다. 한 번에 전체 SQL 문장을 이스케이프하는 단점은 무엇입니까?하나씩 입력 매개 변수를 이스케이프해야합니까, 아니면 전체적으로 SQL 쿼리를 이스케이프해야합니까?

+1

전체 SQL 문 (그것이 의미하는 바라면)을 한 번에 이스케이프 처리 할 수는 없습니다. 그것은 가치 현명하게 작동합니다 (그리고 그 값은 문자열이어야합니다). 그러나 이스케이프는 오래된 데이터베이스 인터페이스 기능을 사용하지 않음으로써 피할 수 있습니다. (검색을 사용하여 PDO와 바운드 매개 변수를 찾으십시오.) – mario

+0

가능한 복제본 [MySQL/PDO/Prepared Statements - 모든 점프, 다소 압도적이며 약간 혼란 스럽습니까?] (http://stackoverflow.com/questions/) 8031185/mysql-pdo-prepared-statements-all-a-big-jump-a-bit-over -helming-and-a-lit) – mario

답변

3

쿼리에서 '작은 따옴표'와 같이 값을 나타내므로 이스케이프 처리를 원하지 않지만 작은 따옴표가 포함될 수있는 값을 이스케이프 처리해야하므로 작동하지 않습니다.

+0

mysql이 이스케이프 된 SQL 문자열을 허용하지 않는다고 확신합니까? –

+0

"받아들이는"질문이 아닙니다. MySQL 구문 (즉, 문자열 구분)에서 필요한 아포스트로피를 이스케이프하면 쿼리가 완전히 변경되어 대부분 중단됩니다. – andrewtweber

+0

@ UğurGümüşhan 그 작은 따옴표는 값의 시작과 정지를 나타내는 제어 문자이기 때문에 값을 포함하여 전체 명령문을 이스케이프하지 않으려는 이스케이프 처리 된 SQL 문자열을 허용하지 않습니다. – jakx

-1

mysql_real_escape_string을 사용하면 SQL 문자열을 이스케이프 처리하는 것이 더 유리하다고 생각합니다. 시간과 기억을 참조하십시오. 필요한 경우 각 입력 레벨에서 일부 유효성 검증을 수행 할 수 있습니다.

+0

야, 이건 절대 의미가없는 유일한 대답은 아니다. 다른 사람들을 도우려고하기 전에 좀 더 배워야 할 필요가 있습니까? –

+0

물론 선생님, 저는 도와주고 배우려고합니다. 나는 당신이 어디 있는지 알아 내려고 노력하고 있습니다. – tmjam

0

준비된 문을 사용하고 바인드 매개 변수를 사용하십시오. 그 밖의 모든 일은 대기중인 해킹입니다.

+0

사실이 아닙니다. 준비된 명령문과 바인드 매개 변수를 이해하지 못하고 일종의 마법의 성가로 사용하는 것도 해킹 대기입니다. 그러나 탈출은 감각과 함께 사용하면 깨지지 않습니다. –

+0

@Shrapnel 당신은 그것을 자세히 설명해 주시겠습니까? 교육 목적으로. – Repox

+0

모든 데이터를 문자열로 처리하여 이스케이프 및 인용 할 수있는 한 "hack waiting"도 없습니다. "그 밖의 무엇이든"은 준비된 성명서에 충분합니다. 반면에, 일단 식별자를 삽입해야하고, 인용문을 이스케이프 처리하지 않으며, 준비된 명령문도 도움이되지 않습니다. –

0

각 입력을 하나씩 탈출하십시오. 전체 SQL 쿼리에 대해이 작업을 수행하면 이스케이프 후에도 SQL 문이 유효한지 확인할 수 없습니다. 이렇게 생성 된 SQL에 당신은 내가 탈출 생각

("a", "a") 

대신

("aaa") 

를 받게됩니다의 대신

aaa 

사용자의

a", "a 

을 입력합니다 가정 해 봅시다 전체 SQL 문이 작동하지 않습니다. 그런 상황에서.

-1

각 var를 이스케이프 처리하기위한 긴 코드가 염려되지만 어떤 이유로 함수의 목적을 잊어 버렸습니다.

function escape_me($value) { 
    $value = strip_tags($value); 
    $value = mysql_real_escape_string($value); 
    ......... 
} 

$var1 = escape_me($_POST['var1']); 

바라건대 올바른 방향으로 향하게되기를 바랍니다.

+0

나는 escape_me 함수를 가지고있다. 어쨌든 고마워. –

+1

@ Uğur는 중대한 실수와 같은 기능을합니다. –

+0

@ Col.Shrapnel 입력을 이스케이프하는 것이 왜 나쁜 것입니까? 그것은 단지 하나의 예입니다. – frustratedtech

1

다소 다소 그렇지만 나는 매우 중요하다고 느낍니다.

이 문제에 대한 첫 번째 질문은 아닙니다. 그리고 당신은 아직도 요점을 얻지 못하는 것 같습니다.

mysql이 이스케이프 된 SQL 문자열을 허용하지 않습니까?

나는 사면을 간청하지만,이 질문은 당신의 주된 문제로 보입니다.
설명을 찾는 대신 이해를 찾는 대신, 일종의 긍정적 인 대답을 묻는 것입니다.

이 질문의 결과는 귀하가 이해 한 바에 따라 자신이 준 답변 인 이어야합니다.
이 경우에만 유용합니다.
그렇지 않으면 바로 다음 단계로 넘어 질 것입니다.

이스케이프 문자열의 의미를 이해하려고하십시오.
매우 기본적인 SQL 지식을 가진 사람이라면 누구의 질문도 전혀 의미가 없습니다.
물론 이러한 전체 쿼리 이스케이프는 작동하지 않습니다. SQL 쿼리의 특성 때문입니다.
이 성질을 이해하려면 이 절실합니다.. 몇 권의 책을 읽으십시오. 일부 보증이 아닌 설명을 요청하십시오.

관련 문제