2009-03-27 6 views
6

SQL Server 2005 데이터베이스에 varbinary (MAX) 필드가 있습니다. PHP를 사용하여 해당 필드에 이진 데이터 (예 : 이미지)를 삽입하는 방법을 알아 내려고합니다. SQL Server 데이터베이스 연결에 ODBC를 사용하고 있습니다. MySql 데이터베이스와 함께 사용하기 위해 이것을 설명하는 많은 예제를 보았지만 SQL Server와 함께 작동시키지 못했습니다. 감사.PHP를 사용하여 SQL Server에 이진 데이터 삽입

답변

3

간단한 답은 다음과 같습니다. 수행중인 작업을 중단하십시오.

매우 구체적인 보안 문제가없는 한 데이터베이스에 이진 파일을 저장하지 않으려합니다. 대신 파일 이름을 저장하고 (충돌을 막기 위해 파일의 이름을 바꿀 수 있음) 데이터베이스에 저장하려고합니다. 보안에 문제가 있으면 웹 폴더가 아닌 폴더에 넣고 코드를 사용하여 파일을 검색하고 사용자가 액세스 할 수있는 경우에만 파일을 제공하십시오.

데이터베이스 내부에 이미지 나 파일을 저장하는 것은 파일 공간 낭비, 데이터베이스의 오용, 가장 잘하는 일을시키는 것이 아닙니다. 파일 시스템은 파일을 알고, 데이터베이스는 데이터를 압니다.

+0

약 gzdeflated 텍스트 문자열은 무엇입니까? 이진 압축 된 텍스트 데이터가 데이터베이스에서 집처럼 보입니다. – chiliNUT

+3

그는 해야할지 묻지 않았습니다. 어떻게 할 수 있는지 물었습니다. 당신은 OP의 질문에 대답해야합니다. 그렇다면 꼭해야 할 일로 생각/의견을 덧붙여 야합니다. – Losbear

+1

좋은 조언이긴하지만, Google 사람들이 솔루션을 찾는 사람들에게 도움이됩니다. 모든 이진 데이터가 이미지 또는 파일이 아닙니다. – dmarra

13
function prepareImageDBString($filepath) 
{ 
    $out = 'null'; 
    $handle = @fopen($filepath, 'rb'); 
    if ($handle) 
    { 
     $content = @fread($handle, filesize($filepath)); 
     $content = bin2hex($content); 
     @fclose($handle); 
     $out = "0x".$content; 
    } 
    return $out; 
} 

사용 :

$out = prepareImageDBString('/img/myimg.png'); 
mssql_query("INSERT INTO MyTable(MyImage) VALUES($out) "); 

myimage을이 유형은 이미지

+1

명확한 +1. 이것은 선택되어야합니다. Blob을 사용할 때 많은 경우가 있습니다. 예를 들어 10 억 개의 실제 파일 대신 1 개의 데이터베이스 파일을 백업하는 것이 더 쉽습니다. 단 한 번의 발언 만하면 기능이 끝나지 않습니다. –

2

나는 그것이 나쁜 습관이다 말할 것이다 SQL 서버 필드, 그것은 얼마나 큰지에 따라 이미지와 방법 귀하의 응용 프로그램이 그것을 사용합니다.

크기가 256K 미만인 파일은 db로 저장하는 것이 더 효율적입니다. 1 MB 이상, 파일 시스템에 저장하는 것이 좋습니다.

Storing images in SQL Server?

관련 문제