データベースにバイナリ データを挿入する 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 で実行しているためでしょうか? (両方ともかなり古いバージョン)。