2012-09-06 2 views
0

현재 업데이트중인 이전 사용자 사이트가 있습니다. 사이트의 사용자는 이전에 디렉토리에 저장된 프로필 사진을 업로드했습니다. 지금은 데이터베이스에 이러한 프로필 이미지를 유지하기를 원합니다. (모든 데이터를 백업하기 쉽지 만) 어떻게해야하는지에 대한 작업에 어려움을 겪고 있습니다.파일을 blob로 변환하여 데이터베이스에 저장

방금 ​​업로드 한 파일과 tmp 이름 등을 사용하여이 작업을 수행하는 방법에 대한 자습서가 많이 있지만, 이미 업로드 된 파일로 어떻게 다시 만들 수 있습니까?

나는 $data = file_get_contents($filename); 바이너리 파일을 만들 보이지만와 함께 데이터베이스에 저장하지 않는 것 로 보았다 :

mysql_query("UPDATE profiles SET company_logo = mysql_real_escape_string('".$data."') WHERE id = 1 ") or die(mysql_error()); 

* UPDATE * 그래서를 조사 후 더 많은 것을 생각해 봅시다. 대다수와 함께 이미지를 저장하고 폴더에 이미 저장하는 것 같습니다.

+2

제발 제발 그렇게하지 마세요. 파일 시스템은 파일을 저장하는 멋진 데이터베이스입니다. – Adi

+0

정말 데이터베이스에 파일을 저장하면 안됩니다. 파일이 파일 시스템에 있어야하는 데는 좋은 이유가 있습니다. [이 질문에]보십시오 (http://stackoverflow.com/questions/492549/how-can-i-insert-large-files-in-mysql-db-using-php) –

답변

2

일반적으로 이미지를 데이터베이스에 저장하는 것은 좋지 않습니다.

파일에 이미지를 저장하고 필드 또는 테이블에 참조를 유지하는 것이 좋습니다.

그러나 저장하려는 경우 BLOB (Binairy Large OBject)로 저장해야합니다. BLOB 필드에서 문자 변환이 수행되지 않습니다. 파일을 저장할 때 정확하게 파일 내용으로 저장해야합니다. 따라서 mysql_real_escape string을 제거하십시오. 바이너리 데이터가 망가질 것입니다.

+0

왜 나쁜 생각인가요? 데이터베이스에 이미지를 저장 하시겠습니까? 로드 시간이 약간 느려질 수도 있음을 알고 있습니다 ... – jimbo

+1

DB 이미지 저장에 전쟁이 시작되지 않는 것이 항상 어렵습니다 :)이 토론을 한번보세요 : http://stackoverflow.com/questions/3748/storing-images- in-db-yea-or-nay – JvdBerg

+0

mysql_real_escape_string을 제거하면 위험 할 수 있습니다. 실제로''와 같은 것을 가진다면 어떻게되는지 생각해보십시오.) 테이블에서 x;'파일을 삭제 하시겠습니까? 훨씬 더 나은 접근법은 prepared statement를 사용하여 blob 데이터로 실행하는 것입니다. 그런 식으로 DB 서버/드라이버는 필요한 변환 자체를 처리합니다. –

관련 문제