【问题标题】:Problem storing blob values with Doctrine使用 Doctrine 存储 blob 值的问题
【发布时间】:2011-01-17 21:21:28
【问题描述】:

我使用 Doctrine 1.1.2 作为我的 ORM 框架,并结合 Zend 框架和 MSSQL 服务器后端。我想要做的是将一个 blob 存储到数据库中,但是当我尝试时,Doctrine 会抛出错误。数据库中列的类型为varbinary(max),Doctrine中的模型配置如下:

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

这是用 Doctrine::generateModelsFromDB 生成的,应该是正确的。 Blob 的来源是文件上传。我已经验证文件上传成功,并且我能够打印二进制数据(显示为一堆乱码数据)。

当我尝试使用 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();

这应该是直截了当的,但我就是不知道我做错了什么。

【问题讨论】:

    标签: php sql-server doctrine blob


    【解决方案1】:

    您可以在保存之前尝试base64_encode-ing您的数据,并在从数据库中提取数据后尝试base64_decode

    【讨论】:

    • 这是否适用于 varbinary 列?如果我没记错的话,那将导致字符串。我可以将列更改为 varchar(max),但我宁愿将其存储为 varbinary。我会尝试一下,看看有什么用。我简直不敢相信不可能将 blob 存储到带有教义的 mssql 服务器中,所以我真的很想看到一个如何做到这一点的示例;)
    • 您写道:“数据库中的列是 varchar(max) 类型”,这就是我认为二进制数据有问题的原因。检查您的架构,也许您在列类型上有错字,并且一直在尝试将二进制数据保存到字符串列中。
    • 哦,对不起,错字在上面的文字中。列类型为数据库中的 varbinary(max)。
    猜你喜欢
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2018-03-02
    • 1970-01-01
    • 2012-05-10
    • 2015-12-10
    相关资源
    最近更新 更多