MySQL Blob 字段语法错误

问题描述 投票:0回答:1

我创建了一个具有 BLOB 类型属性的 Doctrine ORM 实体:

public const MAX_BLOB_SIZE = 2097152;
        
#[ORM\Column(name: 'blob', type: Types::BLOB, length: self::MAX_BLOB_SIZE, nullable: FALSE)]
private $_blob;

public function setBlobStream($blob) : void {

    if (!is_resource($blob)) {
        throw new \InvalidArgumentException('Expected a resource, got ' . gettype($blob));
    }

    $this->_blob = $blob;

}

当设置此字段并使用实体管理器保留此对象时,我总是收到语法错误:

$asset->setBlobStream($uploads['payload']->getStream()->detach());
$em->persist($asset);
$em->flush();

// An exception occurred while executing a query: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'blob = '????\\0\u0010JFIF\\0\u0001\u0001\u0001\\0H\\0H\\0\\0??\\0C\...

我确实弄清楚的一件事是 DBAL 学说有一个特定的参数类型,您应该指定用于存储大型对象(

\Doctrine\DBAL\ParameterType::LARGE_OBJECT
),但我似乎无法弄清楚我是否需要和/或可以为 ORM 指定它.

有什么建议吗?

php doctrine
1个回答
0
投票

我终于自己发现了问题。

看来(正如之前的用户评论并不幸删除的那样)列名

blob
是问题所在。我认为该学说不会使用 MySQL 适配器的反引号来转义列名称。

© www.soinside.com 2019 - 2024. All rights reserved.