将imagepng保存到MySQL数据库中


Save imagepng to MySQL database

我有一个脚本,它创建一个图像并调用imagepng将其输出到浏览器。相反,我想将它保存到MySQL数据库中(作为blob)。我知道如何将文件读入准备好的报表

while ($data = fread($fp, 1024)) {
    $size += strlen($data);
    $stmt->send_long_data(0, $data);
}

问题是,我不想让imagepng写一个文件,这样我就可以把它读回数据库
有简单的方法吗?

更新:以下是我如何尝试使用输出缓冲:

ob_start();
imagepng($dst_r,null);
$img = ob_get_clean();
$db = Database::getInstance(); // Singleton on MySQLi
$s = $db->prepare("UPDATE " . $db->getTableName("Users") . " SET `Picture` = ? WHERE `UserID` = ?" );
$s->bind_param('bi', $img, $_POST['UserID']);
$s->send_long_data(0, $img);
$s->execute();

数据库没有更新,也没有任何错误。

根据我刚刚在php.net中读到的内容,您可能可以使用ob_start()、ob_get_contents&ob_end_clean()。

混合,我的意思是:

ob_start();
imagepng($image);
$imageContent = ob_get_contents();
ob_end_clean();

如果我是你,我会把它保存在一个临时文件中,但可以随心所欲:)


编辑:我认为你对数据库的管理也有问题。以下是可能工作的

//include here the thing to get $imageContent
$db = Database::getInstance(); // Singleton on MySQLi
$s = $db->prepare("UPDATE " . $db->getTableName("Users") . " SET `Picture` = ? WHERE `UserID` = ?" );
$null = NULL;
$s->bind_param('bi', $null, $_POST['UserID']);
$byteToSend = 1024;//this should equals the max_allowed_packet variable in your mysql config (usually in my.cnf config file)
$i=0;
while ($contentToSend = substr($imageContent, $i, $byteToSend)) {
    $s->send_long_data(0, $contentToSend);
    $i+=$byteToSend;
}