我在使用 CakePHP 2.x (2.1.5, 2.2.7) 将二进制数据插入数据库时遇到了真正的问题。
我的问题是,当我将原始二进制数据插入数据库时,出现以下错误:
错误:SQLSTATE[HY093]:无效参数号:混合命名参数和位置参数
我的插入代码如下所示:
$imageData = array(
$this->alias => array(
'parent_id' => $imageId,
'image' => $imageBlob,
'encoding' => $encoding,
'mime_type' => $mime_type,
'file_name' => $options['fileDetails']['name'],
'width' => $imageWidth,
'height' => $imageHeight,
'size_type' => $resizeName,
'owner_class' => $options['ownerClass'],
'token' => $this->generateToken()
)
);
$this->create();
$this->save($imageData);
如果我在插入之前对 imageBlob 数据进行 base64 编码,则插入工作正常。CakePHP 1.3 中的类似代码运行良好,无需先对数据进行 base64 编码。MySQL 中的列是 MEDIUMBLOB。
我已经开始通过 cake 库跟踪代码,并确定列类型被正确猜测为“二进制”,并且执行正在运行“二进制”案例:
switch ($column) {
case 'binary':
return $this->_connection->quote($data, PDO::PARAM_LOB);
我也很惊讶 Cake 实际上并没有使用带有命名参数的普通 PDO 语法,它只是构建了一个很大的长 SQL 字符串。
插入二进制数据的问题可能是因为我在 PHP 5.2.6 或 MySQL 5.0.45 中运行吗?(两个都很旧的版本)。