저는 종종 하나씩 입력을 피하고 두 가지 방법의 차이점에 대해 궁금합니다. 어느 것이 더 일반적인 관행인가? 나는 "escape requires"필드를 먼저 이스케이프 처리 한 다음 각 값에 대해 긴 이스케이프 코드를 작성합니다. 한 번에 전체 SQL 문장을 이스케이프하는 단점은 무엇입니까?하나씩 입력 매개 변수를 이스케이프해야합니까, 아니면 전체적으로 SQL 쿼리를 이스케이프해야합니까?
답변
쿼리에서 '작은 따옴표'와 같이 값을 나타내므로 이스케이프 처리를 원하지 않지만 작은 따옴표가 포함될 수있는 값을 이스케이프 처리해야하므로 작동하지 않습니다.
mysql이 이스케이프 된 SQL 문자열을 허용하지 않는다고 확신합니까? –
"받아들이는"질문이 아닙니다. MySQL 구문 (즉, 문자열 구분)에서 필요한 아포스트로피를 이스케이프하면 쿼리가 완전히 변경되어 대부분 중단됩니다. – andrewtweber
@ UğurGümüşhan 그 작은 따옴표는 값의 시작과 정지를 나타내는 제어 문자이기 때문에 값을 포함하여 전체 명령문을 이스케이프하지 않으려는 이스케이프 처리 된 SQL 문자열을 허용하지 않습니다. – jakx
mysql_real_escape_string을 사용하면 SQL 문자열을 이스케이프 처리하는 것이 더 유리하다고 생각합니다. 시간과 기억을 참조하십시오. 필요한 경우 각 입력 레벨에서 일부 유효성 검증을 수행 할 수 있습니다.
야, 이건 절대 의미가없는 유일한 대답은 아니다. 다른 사람들을 도우려고하기 전에 좀 더 배워야 할 필요가 있습니까? –
물론 선생님, 저는 도와주고 배우려고합니다. 나는 당신이 어디 있는지 알아 내려고 노력하고 있습니다. – tmjam
준비된 문을 사용하고 바인드 매개 변수를 사용하십시오. 그 밖의 모든 일은 대기중인 해킹입니다.
사실이 아닙니다. 준비된 명령문과 바인드 매개 변수를 이해하지 못하고 일종의 마법의 성가로 사용하는 것도 해킹 대기입니다. 그러나 탈출은 감각과 함께 사용하면 깨지지 않습니다. –
@Shrapnel 당신은 그것을 자세히 설명해 주시겠습니까? 교육 목적으로. – Repox
모든 데이터를 문자열로 처리하여 이스케이프 및 인용 할 수있는 한 "hack waiting"도 없습니다. "그 밖의 무엇이든"은 준비된 성명서에 충분합니다. 반면에, 일단 식별자를 삽입해야하고, 인용문을 이스케이프 처리하지 않으며, 준비된 명령문도 도움이되지 않습니다. –
각 입력을 하나씩 탈출하십시오. 전체 SQL 쿼리에 대해이 작업을 수행하면 이스케이프 후에도 SQL 문이 유효한지 확인할 수 없습니다. 이렇게 생성 된 SQL에 당신은 내가 탈출 생각
("a", "a")
대신
("aaa")
를 받게됩니다의 대신
aaa
사용자의
a", "a
을 입력합니다 가정 해 봅시다 전체 SQL 문이 작동하지 않습니다. 그런 상황에서.
각 var를 이스케이프 처리하기위한 긴 코드가 염려되지만 어떤 이유로 함수의 목적을 잊어 버렸습니다.
function escape_me($value) {
$value = strip_tags($value);
$value = mysql_real_escape_string($value);
.........
}
$var1 = escape_me($_POST['var1']);
바라건대 올바른 방향으로 향하게되기를 바랍니다.
나는 escape_me 함수를 가지고있다. 어쨌든 고마워. –
@ Uğur는 중대한 실수와 같은 기능을합니다. –
@ Col.Shrapnel 입력을 이스케이프하는 것이 왜 나쁜 것입니까? 그것은 단지 하나의 예입니다. – frustratedtech
다소 다소 그렇지만 나는 매우 중요하다고 느낍니다.
이 문제에 대한 첫 번째 질문은 아닙니다. 그리고 당신은 아직도 요점을 얻지 못하는 것 같습니다.
mysql이 이스케이프 된 SQL 문자열을 허용하지 않습니까?
나는 사면을 간청하지만,이 질문은 당신의 주된 문제로 보입니다.
설명을 찾는 대신 이해를 찾는 대신, 일종의 긍정적 인 대답을 묻는 것입니다.
이 질문의 결과는 귀하가 이해 한 바에 따라 자신이 준 답변 인 이어야합니다.
이 경우에만 유용합니다.
그렇지 않으면 바로 다음 단계로 넘어 질 것입니다.
이스케이프 문자열의 의미를 이해하려고하십시오.
매우 기본적인 SQL 지식을 가진 사람이라면 누구의 질문도 전혀 의미가 없습니다.
물론 이러한 전체 쿼리 이스케이프는 작동하지 않습니다. SQL 쿼리의 특성 때문입니다.
이 성질을 이해하려면 이 절실합니다.. 몇 권의 책을 읽으십시오. 일부 보증이 아닌 설명을 요청하십시오.
- 1. Javascript에서 슬래시를 이스케이프해야합니까? Dreamweaver의
- 2. 카산드라에 삽입 할 때 데이터 입력을 이스케이프해야합니까?
- 3. 언제 정규식 문자 집합 ([]) 내의 문자를 이스케이프해야합니까?
- 4. 특정 문자 만 UTF-8 XML로 이스케이프해야합니까?
- 5. 백분율 기호 (%)는 항상 HTML 이스케이프해야합니까?
- 6. HTML- 이스케이프 데이터는 언제해야하며 언제 데이터를 이스케이프해야합니까?
- 7. mysql_real_escape_string을 사용하여 예상 된 정수 값을 이스케이프해야합니까 아니면 그냥 (int) $ expectedinteger를 사용할 수 있습니까
- 8. JSON 배열에서 HTML을 반환 할 때 어떤 문자를 이스케이프해야합니까?
- 9. iCalendar (rfc2445)의 TEXT 값에서 콜론 문자를 이스케이프해야합니까?
- 10. 입력 매개 변수를 빠르게 확인하는 방법은 무엇입니까?
- 11. 선택적 매개 변수를 사용하여 SQL 쿼리를 작성하는 방법은 무엇입니까?
- 12. 매개 변수를 사용하여 ASP에서 SQL 쿼리를 전달하는 동안 오류가 발생했습니다.
- 13. SQL Reporting Services의 매개 변수를 기반으로 쿼리를 편집하십시오.
- 14. 매개 변수를 포함한 전체 SQL 쿼리를 얻는 방법
- 15. Excel 2003에서 날짜 매개 변수를 SQL 쿼리
- 16. WCF 데이터 계약 모델에 sql 입력 매개 변수를 포함해야합니까?
- 17. 매개 변수를 변경하면서 동일한 PDO 쿼리를 만들 때마다 매번 prepare()를 호출합니까? 아니면 한 번만 호출합니까?
- 18. 루프에서 SQL 매개 변수를 사용하십시오.
- 19. sql 'in'문에 매개 변수를 전달하는 방법은 무엇입니까?
- 20. SQL 쿼리에서 함수 매개 변수를 사용하는 방법?
- 21. 입력 매개 변수를 사용하여 이미지를 동적으로 작성하십시오.
- 22. 입력 매개 변수를 기반으로 반환 유형 결정
- 23. PDO 인젝션에서 바인딩 매개 변수를 사용하여 쿼리를 작성하는 것이 안전합니까?
- 24. URL 매개 변수를 사용하여 sql 쿼리로 정렬
- 25. SQL 연결이 왜 매개 변수를 남겨 둡니까?
- 26. Sql Server 전체적으로 들리는 사람 이름
- 27. XQuery 매개 변수를 사용하여 SQL 함수 작성
- 28. 매개 변수를 기준으로 쿼리를 필터링하는 가장 좋은 방법은 무엇입니까?
- 29. 일괄 삽입 또는 하나씩
- 30. 매개 변수를 삽입 한 후 SqlCommand/OleDbCommand 쿼리를 검색 하시겠습니까?
전체 SQL 문 (그것이 의미하는 바라면)을 한 번에 이스케이프 처리 할 수는 없습니다. 그것은 가치 현명하게 작동합니다 (그리고 그 값은 문자열이어야합니다). 그러나 이스케이프는 오래된 데이터베이스 인터페이스 기능을 사용하지 않음으로써 피할 수 있습니다. (검색을 사용하여 PDO와 바운드 매개 변수를 찾으십시오.) – mario
가능한 복제본 [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