我在共享主机帐户上有 MySQL 5.1.65,在将图像插入到我的图像表(InnoDB)中时遇到了麻烦,该表有 MEDIUMBLOB 列,我想在其中存储图像数据。
CREATE TABLE IF NOT EXISTS `images` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`description` varchar(160) DEFAULT NULL,
`image` mediumblob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我正在使用 PDO 从 PHP 5.2.17 连接到 db。我尝试
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
在我的连接中进行设置,因为在 SO 和网络上对类似(或相同)问题的一些答案中建议了它,但它并没有解决问题。我还检查了 MySQL 配置中允许的最大数据包,它设置为 16,777,216,这应该足够了,因为我不允许上传大于 5 MB 的图像。
我不知道它是否相关,但我在事务中插入数据,在该事务中我也对其他表进行多次插入。
$image_params = array(
"description" => $data->description,
"image" => $image->getBinary() // Basicaly does file_get_contents() and returns
);
$image_statement = $pdo->prepare(
"INSERT INTO images (description, image)
VALUES(:description, :image)"
);
$pdo->beginTransaction();
$image_statement->execute($image_params);
$some_other_statement->execute($params);
$pdo->commit()
在 phpMyAdmin 中,当我浏览图像表时,图像列始终显示 [BLOB - 15B],当我访问它时,我得到包含“资源 id #[id]”的 .bin 文件,其中 [id] 是图像的 id。
谢谢你,维克托