【问题标题】:Put an image into a SQLite database将图像放入 SQLite 数据库
【发布时间】:2012-01-31 15:14:21
【问题描述】:

根据this thread,我应该使用fopen。我已经这样做了,但在我的示例中,我使用的是 bindValue 而不是 bindParam

$query->bindValue(':'.$key, fopen($value, "rb"), PDO::PARAM_LOB);

$value 包含文件的路径 (/var/www/html/....jpg)。

我试过了,但是当我打开带有特定条目的 SQLiteManager 时,我得到了[Exception ... "Component returened failure code 0x8052000b (NS_ERROR_FILE_CORRUPTED)

为什么这不起作用?

This 是我实现的其余部分的样子。

编辑:

file_get_contents 给我带来了同样的错误。

可能是php模块的问题?

SELECT sqlite_version() 带给我 3.7.7.1

phpinfo()给我

配置命令:'--without-sqlite'

解析的其他 .ini 文件:/etc/php.d/pdo_sqlite.ini、/etc/php.d/sqlite.ini

SQLite:

PECL 模块版本 2.0-dev $Id: sqlite.c,v 1.166.2.13.2.9 2007/05/19 17:58:22 iliaa Exp $

SQLite 库 2.8.17

SQLite 编码 UTF-8

PDO驱动mysql, odbc, sqlite, sqlite2

pdo_sqlite

PECL 模块版本 1.0.1 $Id: pdo_sqlite.c,v 1.10.2.6.2.2 2007/03/23 14:30:00 wez Exp $

SQLite 库 3.3.6

PDO:

PDO驱动mysql, odbc, sqlite, sqlite2

编辑 2:

这就是我可以显示 BLOB 图像的方式。 getimage.php

header("Content-type: image/jpg");

require_once('class.DatabaseQuery.php');

$db = new DatabaseQuery();
$name = sqlite_escape_string($_GET['name']);
$sql = "SELECT image FROM $name WHERE _id=:id;";

$id = $_GET['id'];
$result = $db->ExecuteQuery($sql, array("id"=>$id));

echo $result[0]['image'];

显示图片:<img src='getimage.php?name=$printname&id=" . $row['_id'] . "' heigth='75' width='75' alt='Test' />

这样我就可以显示图像了。但是如何在数据库中插入图片呢?

【问题讨论】:

  • 你不知道我为什么需要这个。我想用内容(在这种情况下也是图像)填充 SQLite 数据库。该数据库适用于仅下载一个文件(数据库)的移动客户端。这是我的障碍,我必须这样做。
  • 如果你只想下载一个文件,为什么不把它做成一个包含 db 和 image 目录的 zip 存档呢?
  • 不同的客户端可以有不同的版本,所以我也需要创建不同版本的镜像目录。此外,不同客户端的实现也必须改变。所以目前我想保留在数据库中存储图像的解决方案。这是可能的,因为 SQLiteManager 可以将图像存储为 BLOB。为什么 PHP 脚本不可能做到这一点?
  • 警告,您很容易受到 SQL 注入的影响。 getimage.php?name=1; DROP TABLE xxx;--

标签: php database image sqlite pdo


【解决方案1】:

如果您对文件进行编码并将其保存在文本字段中,您可能会避免很多麻烦。

$dataToSave = base64_encode(file_get_contents('filename'));

要阅读,您需要一个 base64_decode。

【讨论】:

  • 我还尝试使用base64_encodebin2hex 将图像导入数据库。数据库中的图像以某种方式被十六进制解码并保存为BLOB。我将不得不询问客户的开发人员他们现在如何处理图像以及他们是否可以切换到base64_encode。与此同时,我设法显示了数据库中的图像。所以我可以显示 BLOB 图像,甚至可以使用 SQLiteManager 输入 BLOB 图像。用 PHP 插入图像应该不难。但如果我没有得到这个管理,你的答案将是我认为的唯一解决方案。
猜你喜欢
  • 2011-07-22
  • 1970-01-01
  • 2021-09-13
  • 2015-12-01
  • 2012-04-27
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多