2012-01-31 108 views
3

根据this thread我应该使用fopen。我已经这样做了,但在我的示例中,我使用的是bindValue而不是bindParam把图像放入SQLite数据库

$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 Module version 2.0-dev $Id: sqlite.c,v 1.166.2.13.2.9 2007/05/19 17:58:22 iliaa Exp $

SQLite Library 2.8.17

SQLite Encoding UTF-8

PDO drivers mysql, odbc, sqlite, sqlite2

PDO_SQLITE

PECL Module version 1.0.1 $Id: pdo_sqlite.c,v 1.10.2.6.2.2 2007/03/23 14:30:00 wez Exp $

SQLite Library 3.3.6

PDO:

PDO drivers 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' />

因此,我可以显示图像。但是,我怎样才能在数据库中插入图像?

+1

你不知道我为什么需要这个。我想用内容填充SQLite数据库(在这种情况下也是图像)。该数据库用于仅下载一个文件(数据库)的移动客户端。这是我的障碍,我必须这样做。 – testing 2012-01-31 15:24:03

+0

如果你只是想下载一个文件,为什么不把它作为一个包含数据库和图像目录的zip压缩文件? – 2012-01-31 15:54:01

+1

不同的客户端可以有不同的版本,所以我需要创建不同版本的图片目录。此外,不同客户的实施也必须改变。所以目前我想保留图像存储在数据库中的解决方案。这是可能的,因为SQLiteManager可以将图像存储为BLOB。为什么这不应该由PHP脚本实现? – testing 2012-01-31 16:04:33

回答

0

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

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

阅读你需要一个BASE64_DECODE。

+0

我也尝试使用'base64_encode'和'bin2hex'将图像存入数据库。数据库中的图像以某种方式进行十六进制解码并保存为“BLOB”。我不得不问客户的开发人员他们现在如何处理图像,以及他们是否可以切换到'base64_encode'。与此同时,我设法显示数据库中的图像。所以我可以显示BLOB图像,甚至可以用SQLiteManager输入BLOB图像。用PHP插入图像应该不那么困难。但如果我没有得到这个管理,你的答案将是我认为的唯一解决方案。 – testing 2012-02-01 16:45:41