gpt4 book ai didi

php - MySQL MEDIUMBLOB 的大小始终相同

转载 作者:行者123 更新时间:2023-11-29 08:40:38 28 4
gpt4 key购买 nike

我的共享主机帐户上有 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 连接到数据库。我尝试设置 PDO::MYSQL_ATTR_INIT_COMMAND =>“设置名称 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。

谢谢你,维克托

最佳答案

我已经找到解决问题的方法了! $image->getBinary() 方法返回 GD 图像资源而不是实际的二进制图像字符串,因此我将其更改为:

    public function getBinary() {
ob_start();
imagejpeg($this->image);
return ob_get_clean();
}

现在就可以了!吸取教训,我可以继续我的项目了! :)

关于php - MySQL MEDIUMBLOB 的大小始终相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13896566/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com