根据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' />
因此,我可以显示图像。但是,我怎样才能在数据库中插入图像?
你不知道我为什么需要这个。我想用内容填充SQLite数据库(在这种情况下也是图像)。该数据库用于仅下载一个文件(数据库)的移动客户端。这是我的障碍,我必须这样做。 – testing 2012-01-31 15:24:03
如果你只是想下载一个文件,为什么不把它作为一个包含数据库和图像目录的zip压缩文件? – 2012-01-31 15:54:01
不同的客户端可以有不同的版本,所以我需要创建不同版本的图片目录。此外,不同客户的实施也必须改变。所以目前我想保留图像存储在数据库中的解决方案。这是可能的,因为SQLiteManager可以将图像存储为BLOB。为什么这不应该由PHP脚本实现? – testing 2012-01-31 16:04:33