【问题标题】:Displaying and Uploading Image with php and mysqli使用 php 和 mysqli 显示和上传图像
【发布时间】: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 '&lt;img src="data:image/jpg;base64,'.base64_encode($r['src']).'"&gt;'; }
  • 您的错误日志显示什么?您不应该使用参数化查询来逃避。

标签: php mysql image upload


【解决方案1】:

您可以尝试更改此行吗:

echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['src'] ).'"/>';

到这里:

foreach($result as $r){
  echo "<img src='".$r['src']."' />";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 2011-10-20
    • 2014-11-29
    • 2018-10-10
    • 2012-05-31
    • 1970-01-01
    • 2019-04-08
    • 2016-12-20
    相关资源
    最近更新 更多