2010-02-17 3 views
0

저는 젠드 프레임 워크와 MSSQL 서버 백엔드와 함께 ORDM 프레임 워크로 Doctrine 1.1.2를 사용하고 있습니다. 내가하려고하는 것은 데이터베이스에 BLOB를 저장하는 것이지만 Doctrine은 내가 시도 할 때 오류를 던지고있다. 데이터베이스의 컬럼 형 VARBINARY (최대)이며, 다음과 같이 교리 모델이 구성되어Doctrine에 블롭 값을 저장하는 데 문제가 있습니다.

$this->hasColumn('binary_data', 'blob', null, array(
     'type' => 'blob', 
     'notnull' => false, 
     'primary' => false, 
     'autoincrement' => false, 
     )); 

이것은 교리 :: generateModelsFromDB 생성하고, 정확해야한다. 블롭의 소스는 파일 업로드입니다. 나는 파일 업로드가 성공하고, 바이너리 데이터를 인쇄 할 수 있다는 것을 확인했다.

Doctrine 모델을 사용하여 이진 데이터를 저장하려고하면 내가하는 일에 따라 다른 오류 메시지가 나타납니다.

// Error:SQLSTATE[HY000]: General error: 10007 Incorrect syntax near '%PDF-1.5 %µµµµ... 
$model->binary_data = fread(fopen($_FILES["file"]["tmp_name"], 'r'), filesize($_FILES["file"]["tmp_name"])); 
$model->save(); 
--- 
// Error: same as above 
$fileHandle = fopen($_FILES["file"]["tmp_name"], "r"); 
$fileContent = fread($fileHandle, filesize($_FILES["file"]["tmp_name"])); 
$model->binary_data = $fileContent; 
$model->save(); 
--- 
// This should work on 1.2, but I have 1.1.2 
// Error: Validation failed in class Clazz 1 field had validation error: * 1 validator failed on binary_data (type) 
$model->binary_data = file($_FILES["file"]["tmp_name"]); 
$model->save(); 

이 정직해야하지만, 난 그냥 내가 잘못 뭘하는지 알아낼 수 없습니다 : 지금까지 (아마도 좀 더 너무 내가 기억하지 않는)이 시도했다.

답변

0

데이터를 저장하기 전에 base64_encode-ing 데이터를 가져오고 데이터베이스에서 데이터를 가져온 후 base64_decode 데이터를 가져와보십시오.

+0

varbinary 열과 함께 사용할 수 있습니까? 내가 잘못하지 않으면 문자열로 결과가 나옵니다. 열을 varchar (max)로 변경할 수는 있지만 varbinary로 저장하고 싶습니다. 나는 그것을 시험해보고 작동하는 것을 보게 될 것이다. Doctrine을 사용하여 mssql 서버에 BLOB를 저장할 수 없다는 것을 믿을 수 없습니다. 따라서이 작업을 수행하는 방법에 대한 예제를 실제로보고 싶습니다.) – Erik

+1

"데이터베이스의 열은 varchar 유형입니다. (최대) "그래서 나는 바이너리 데이터에 문제가 있다고 생각했다. 스키마를 확인하십시오. 아마도 열 유형에 오타가 있고 문자열 열에 이진 데이터를 저장하려고 시도했을 것입니다. – Marko

+0

오 죄송합니다. 오타가 위의 텍스트에 있습니다. 열 유형은 데이터베이스에서 varbinary (max)입니다. – Erik

관련 문제