저는 젠드 프레임 워크와 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();
이 정직해야하지만, 난 그냥 내가 잘못 뭘하는지 알아낼 수 없습니다 : 지금까지 (아마도 좀 더 너무 내가 기억하지 않는)이 시도했다.
varbinary 열과 함께 사용할 수 있습니까? 내가 잘못하지 않으면 문자열로 결과가 나옵니다. 열을 varchar (max)로 변경할 수는 있지만 varbinary로 저장하고 싶습니다. 나는 그것을 시험해보고 작동하는 것을 보게 될 것이다. Doctrine을 사용하여 mssql 서버에 BLOB를 저장할 수 없다는 것을 믿을 수 없습니다. 따라서이 작업을 수행하는 방법에 대한 예제를 실제로보고 싶습니다.) – Erik
"데이터베이스의 열은 varchar 유형입니다. (최대) "그래서 나는 바이너리 데이터에 문제가 있다고 생각했다. 스키마를 확인하십시오. 아마도 열 유형에 오타가 있고 문자열 열에 이진 데이터를 저장하려고 시도했을 것입니다. – Marko
오 죄송합니다. 오타가 위의 텍스트에 있습니다. 열 유형은 데이터베이스에서 varbinary (max)입니다. – Erik