【发布时间】:2017-12-04 13:31:41
【问题描述】:
我正在尝试显示已上传到 MySQL 数据库的图像。 上传过程正常,但我在显示时遇到问题,我不知道哪里出错了。
这是我的数据库:
CREATE TABLE `data` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`dozent` varchar(32) NOT NULL DEFAULT '',
`datum` date NOT NULL,
`text` text NOT NULL,
`Ort` varchar(45) NOT NULL DEFAULT '',
`gastvortraege` varchar(30) NOT NULL DEFAULT '',
`src` blob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
我上传的数据是用这个代码插入的:
require("vortraege_db.php");
$stmt = $con->stmt_init();
$name = mysqli_real_escape_string($con,$_POST['name']);
$title = mysqli_real_escape_string($con,$_POST['titel']);
$text = mysqli_real_escape_string($con,$_POST['text']);
$ort = mysqli_real_escape_string($con,$_POST ['ort']);
$date = mysqli_real_escape_string($con,$_POST['datum']);
$path = $_FILES['image']['tmp_name'];
if(isset($_POST['gast']))
$uniname = mysqli_real_escape_string($con,$_POST['gast_text']);
else {
$uniname = mysqli_real_escape_string($con,'');
}
$image = file_get_contents($path);
$image = mysqli_real_escape_string($con, $image);
$stmt->prepare("INSERT INTO data(dozent,datum,`text`,Ort,gastvortraege,src) VALUES(?,?,?,?,?,?)");
$stmt->bind_param('sssssb',$name,$date,$text,$ort,$uniname,$image);
$result = $stmt->execute();
if($result)
echo "Datensätze erfolgreich hochgeladen";
else {
echo "Es ist irgendwas schiefgelaufen, bitte erneut versuchen.";
}
出于测试目的,我使用了很多我在 stackoverflow 上找到的代码 sn-ps,这是最新的:
$sql = "SELECT * FROM `data`";
$sth = $con->query($sql);
$result=mysqli_fetch_array($sth);
echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['src'] ).'"/>';
使用我尝试的所有代码,我得到了相同的结果:一个白页。
【问题讨论】:
-
欢迎来到 SO!您应该使用
mysqli_fetch_assoc而不是mysqli_fetch_array。另外,您如何假设 blob 是jpg而不是 gif/png 或其他东西。您是否只允许jpg文件上传? -
谢谢 :) 我假设 blob 是 jpg,因为它只是用于测试,我只上传 jpg 文件,所以我不需要检查是否有其他文件格式。编辑:当我使用
mysqli_fetch_assoc时结果相同 -
好的,
mysqli_fetch_assoc有效吗?您的查询将从数据库中返回多条记录,因此您必须逐条读取它们或更改您的查询以仅读取您想要的记录。 -
不幸的是,我也没有尝试过:
while($r = mysqli_fetch_assoc($query)){ echo '<img src="data:image/jpg;base64,'.base64_encode($r['src']).'">'; } -
您的错误日志显示什么?您不应该使用参数化查询来逃避。