【问题标题】:PHP - Insert Image into databasePHP - 将图像插入数据库
【发布时间】:2013-12-17 21:06:02
【问题描述】:

你好我的编码伙伴。

我需要一些帮助,我遇到了这个问题。 我有这个数据库,我想通过 JS 将这些数据检索到我的代码中。

我的数据库信息:

create table datadatabase (
id              int(10)  not null AUTO_INCREMENT PRIMARY KEY,
name            varchar(25) not null default '',
text            longtext(25) not null default '',
image           blob        not null  );

我希望将数据放入这些字段中。

<img src="<?php echo $img ?>"/>
<h3> <?php echo $text.','.$name  ?>  </h3>

但问题是,文本和图像是一个滑块,我希望每次点击“下一步”按钮时检索新数据和 ID应该是随机的,所以第一张幻灯片可以是 id 99,下一张幻灯片可以是 158,依此类推。

$('.Next').click(function(e) {
 e.preventDefault();
 Slide.appendSlide('<img src"<?php echo $img ?>"/><h3> </h3>') 
})

我应该如何处理这个问题? 非常感谢您。 :)

【问题讨论】:

  • 您一开始就不应该将图像存储在数据库中。您应该做的是将图像保存在一个目录中,然后在数据库中引用它们的文件名,这样您就可以将文件名回显到 src 属性中。
  • 我同意@mtanti。但是如果你打算用 blob 来做,你可以试试这个 SO stackoverflow.com/questions/3259967/… 中的第二个答案我从来没有尝试过这样的事情,所以我不保证它是否会起作用,但你可以试一试

标签: javascript php mysql sql mysqli


【解决方案1】:

首先,将图像存储在数据库中并不是一个好习惯,但是如果您想这样做,您需要创建一个脚本,从数据库中输出特定图像(即通过 ID),然后输出原始图像具有特定内容类型的数据。 (我还建议在其中一个数据库字段中插入图像的类型)。

网址:/image.php?id=5 image.php

<?php
$id = isset($_GET['id'])?intval($_GET['id']):0;
$query = mysql_query("SELECT img FROM datadatabase WHERE id = '$id'");
$row = mysql_fetch_array($query);
if($type=="pjpeg")
$type="jpeg"; // the type could change depending on the database image type
header("Content-type:$type");
echo $row['image'];
?>

对于其他字段,照常读取数据库即可。结果:

<img src="http://..../image.php?id=<?php echo $id ?>"/>
<h3> <?php echo $text.','.$name  ?>  </h3>

$('.Next').click(function(e) {
 e.preventDefault();
 Slide.appendSlide('<img src"http://..../image.php?id=<?php echo $id?>"/><h3> </h3>') 
});

建议在上传之前实现缓存和图像大小调整以避免服务器负载。

还有其他方法,例如 base64。我更喜欢自己使用带有图像元数据的文件系统,而不是仅使用数据库进行图像存储以使其具有可扩展性。

【讨论】:

  • intvalproper escaping 的一个非常糟糕的替代品。当mysqli 和 PDO 几乎不复杂时,用可悲的过时的mysql_query 举例也是非常糟糕的形式。
  • 感谢有关缓存和图像大小调整的提示,有任何文档如何操作吗?
【解决方案2】:

插入.php:

$bin_string = file_get_contents($_FILES["file"]["name"]);
$mysqli->query("INSERT INTO upload(image) VALUES ('" . $bin_string . "')");

检索.php?id=1:

$result = $mysqli->query("SELECT * FROM upload id=1");
$output_bin_string = $result["image"];
header("Content-Type: image/png");
header("Content-Length: " . strlen($output_bin_string ));       
echo $output_bin_string;

通过Js访问:

 <img src="Retrieve.php?id=1" />

【讨论】:

  • 必须在这里使用转义。在查询中拍打二进制字符串是错误的。
猜你喜欢
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
相关资源
最近更新 更多