PHP 将从 BLOB 而不是从 MySQL 表中的 LONGBLOB 生成 jpg 图像

标签 php mysql image blob

以下脚本从 MySQL 中的 BLOB 列输出图像已经很长时间了:

<?
$dbname="usr_web5_1";
$db = new mysqli($dbhost, $dbuser, $dbpwd, $dbname);
$sql = "SELECT foto, fototype, modified FROM `Komplettverzeichnis_extras` WHERE `WPID`= ?";
$stmt = $db->prepare($sql);
$stmt->bind_param("s",$_GET['id']);
if (!$stmt->execute()) $error=true;
$stmt->bind_result($file,$filetype,$modified);
$stmt->fetch();
if (!isset($filetype)) $filetype = "image/jpeg";
if (!$error) {
    header("Content-type: $filetype;");
    header("Last-Modified: $modified;");
} else {
    echo "Error";
    echo $db->error;
}
echo $file;
$stmt->close();
$db->close();
}
?>

我已经尝试将列更改为 LONGBLOB 并将其替换为新的 LONGBLOB 列;图片不会显示。这与我是尝试显示已有图像还是尝试上传新图像无关。

我发现的最接近的问题是 here (德语)。用于更改我使用的列

ALTER TABLE `Komplettverzeichnis_extras` CHANGE `foto` `foto` LONGBLOB DEFAULT NULL

显然,如有必要,我愿意提供更多信息。

我使用 phpMyAdmin 版本 3.5.2.2、PHP 5.3.17 和 mysql 客户端 API 版本(是 mysql 版本吗?)5.1.63。

提前致谢!

最佳答案

好的,我想出了问题:

对于 BLOB,如您在上面所见,我的代码中使用的用于字符串的 mySQLi 方法将起作用。 Longblob 并非如此。在 execute() 之后和 bind_result() 之前,需要一个 store_result()。另外,保存时,我不能简单地使用 bind_param()。相反,必须使用以下使用 NULL 的构造:

if (!$stmt = $db->prepare($sql)) printf($db->error);
$null = NULL;
$stmt->bind_param("bsi",$null,$type,$id);
$stmt->send_long_data(0,$data);
if (!$stmt->execute()) printf($db->error);
$stmt->close();

简而言之,以下资源帮助了我: Oswald@Work

谢谢大家的努力!

关于PHP 将从 BLOB 而不是从 MySQL 表中的 LONGBLOB 生成 jpg 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13044595/

相关文章:

mysql - 将列转为行 SQL

html - 图片突然不显示在网站上

MySQL 插入(枚举?)

c# - 如何创建图像并将其保存以供以后在 XNA 中绘制为纹理?

image - 如何在 plonesites 之间同步内容(图像和文件)

php - 当数据库发生变化时自动更改 html 项目

php - 使用 PHP 在 HTML 表中显示图像 [path] 和数据 [Varchar]

php - Php : Everything below the header is invisible in firefox, 中可能出现错误,但在 chrome 中工作正常

PHP While 循环仅显示最后一行

php - 处理大写撇号时出现问题