2010-12-31 7 views
4

DB에 이미지 저장에 관한이 튜토리얼을 읽었습니다. 이 튜토리얼에서는 작성자가 http://www.phpriot.com/articles/images-in-mysql/7 (mysql_real_escape_string이 좋지만 addslashes을 사용하지만이 문제는 또 다른 문제 임) 삽입하기 전에 이진 데이터의 특수 문자를 이스케이프 처리합니다. 표시 할 때이 저장 될 때PHP - MySQL : DB에 이미지 저장 - 특수 문자 이스케이프

점은, 그는 단지 데이터를 표시한다 : http://www.phpriot.com/articles/images-in-mysql/8

내 질문 :

1) 우리는 (심지어 이진 필드 종류에 특수 문자를 탈출 blob가 필요하십니까) ?

2) 그렇다면 이미지를 올바르게 표시하기 위해 문자를 다시 이스케이프 해제 할 필요가 없습니까? (만약 그렇다면, 최선의 방법은 무엇인가?) 효율성에 대한 의견? 큰 이미지의 경우 : 이스케이프 및 언 이스케이프는 큰 오버 헤드가 될 수 있습니다.

이스케이프에 대한 나의 이해가 완전히 잘못되었습니다 (이스케이프는 쿼리에만 영향을 미치고 최종 데이터는 삽입/저장되지 않습니다).

감사

JP

답변

5

탈출에 대한 이해가 잘못되었습니다. 데이터베이스에 삽입되는 데이터는 이스케이프 처리되므로 쿼리 파서가 정보를 의도 한대로 볼 수 있습니다.

"Jean-Luc 'Earl Gray'Picard '라는 문자열을 사용하십시오. 이스케이프 결과는 'Jean-Luc \'Earl Grey\' Picard'

입니다. MySQL이이를 받으면 이스케이프 처리 된 문자 그대로 이스케이프 처리해야한다는 것을 이해하고 데이터베이스에 저장합니다. 이스케이프 문자는 데이터베이스에 저장되지 않습니다. \는 문자 그대로 문자 뒤에 오는 것을 MySQL에 알려줍니다.

검색 할 때 데이터는 이스케이프 문자없이 응용 프로그램에 표시됩니다. 이스케이프 문자는 쿼리 구문 분석시 제거되므로 응용 프로그램에 표시됩니다.

+0

고마워요! 내 의심을 해결해. –

+0

당신은 환영합니다 :) – kander

1

1) 우리는 심지어 이진 필드 유형 (BLOB)에 대한 특수 문자를 탈출해야합니까?

그렇습니다. mysql_real_escape_string() (실제로 사용하는 것이기 때문에)은 이미지 파일 내부에 쉽게있을 수있는 SQL 주입 공격으로부터 보호합니다. 데이터베이스에 입력하는 임의의 데이터는 먼저 위생 처리되어야합니다.

+0

감사합니다. 우리는 그때를 표시하기 전에 unescape 할 필요가 있다고 생각하니? 그리고 효율성에 대한 어떤 생각? 이 이스케이프 - 이스케이프 때문에 이미지 축소판을 데이터베이스에 저장할 것인지 다시 생각합니다. –

+0

@ JP19 토론을 위해 http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay 참조 –