Проблема хранения значений BLOB-объектов с помощью Doctrine - PullRequest
0 голосов
/ 17 февраля 2010

Я использую Doctrine 1.1.2 в качестве моей платформы ORM в сочетании с Zend Framework и серверной частью MSSQL. То, что я пытаюсь сделать, это сохранить блоб в базе данных, но Doctrine выдает мне ошибки, когда я пытаюсь. Столбец в базе данных имеет тип varbinary (max), а модель в Doctrine настроена следующим образом:

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

Это генерируется с Doctrine :: 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();

Это должно быть прямо, но я просто не могу понять, что я делаю неправильно.

1 Ответ

0 голосов
/ 17 февраля 2010

Вы можете попробовать base64_encode-ing свои данные перед сохранением и base64_decode после их извлечения из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...