Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法从sqlite读取blob数据_Php_Sqlite_Binary_Blob_Bada - Fatal编程技术网

Php 无法从sqlite读取blob数据

Php 无法从sqlite读取blob数据,php,sqlite,binary,blob,bada,Php,Sqlite,Binary,Blob,Bada,我用php存储blob数据,如下所示 $this->_db->exec"CREATE TABLE media (url TEXT, content BLOB)"); $fp = fopen($encoded['path'], 'rb'); $sql = "INSERT INTO media (url, content) VALUES (?, ?)"; $stmt = $this->_db->prepare($sql); $stmt->bindValue(1, $e

我用php存储blob数据,如下所示

$this->_db->exec"CREATE TABLE media (url TEXT, content BLOB)");

$fp = fopen($encoded['path'], 'rb');
$sql = "INSERT INTO media (url, content) VALUES (?, ?)";
$stmt = $this->_db->prepare($sql);
$stmt->bindValue(1, $encoded['url'], PDO::PARAM_STR);
$stmt->bindValue(2, $fp, PDO::PARAM_LOB);
$stmt->execute();
fclose($fp);
在我的C++程序中(使用BADA框架),我从BLB列中读取数据。问题是,当我在本地主机上使用PHP(版本5.3.2-1UBtutu4.2)时,我的C++应用程序可以正确地识别BLUB列为BLUB类型。但是当我使用我的远程主机(PHP版本5.2.12)来创建SQLite文件时,我的C++应用程序将Bulb列识别为文本类型,而我的二进制数据被破坏。 有人知道原因和解决方法吗


谢谢

请确保您正在阅读和编写相同的SQLite版本,而不是: Server = SqLeIe2 C++=SqLITE2或Server=SqLeIe3 C++=SqLITE3,因为这将失败。 如果这就是问题所在(很可能是由于SQLite中的更改,导致两个版本不兼容,无法读取vise versa),那么您有两个选项:

  • 您可以更新服务器(询问提供商),或者
  • 您可以使用可应用的C++源代码来让您的软件读取服务器可以处理的内容。为此,您可以在sqlite.org上获得SQLite2的源代码(以及在那里存档的所有其他构建)。更确切地说,您可以找到最新版本的SqLITE2源代码,以便您可以将支持编译到C++程序中。 希望它能动摇你的船


    PS:如果这不是问题所在,并且您正在读取/写入相同的SQLite版本,那么您可以尝试对您试图存储的二进制数据进行十六进制编码,并将其保存为文本,而不是BLOB。这是一个解决方法,但它可以工作。

    确保您正在阅读和编写相同的SQLite版本,而不是: Server = SqLeIe2 C++=SqLITE2或Server=SqLeIe3 C++=SqLITE3,因为这将失败。 如果这就是问题所在(很可能是由于SQLite中的更改,导致两个版本不兼容,无法读取vise versa),那么您有两个选项:

  • 您可以更新服务器(询问提供商),或者
  • 您可以使用可应用的C++源代码来让您的软件读取服务器可以处理的内容。为此,您可以在sqlite.org上获得SQLite2的源代码(以及在那里存档的所有其他构建)。更确切地说,您可以找到最新版本的SqLITE2源代码,以便您可以将支持编译到C++程序中。 希望它能动摇你的船


    PS:如果这不是问题所在,并且您正在读取/写入相同的SQLite版本,那么您可以尝试对您试图存储的二进制数据进行十六进制编码,并将其保存为文本,而不是BLOB。这是一个解决方案,但它是有效的。

    如果混合使用PHP5.2和5.3,很可能是由于sqlite库中的差异。可能是一个bug在你的Ubuntu安装发布时被修复了。我也这么认为。但问题是,我无法在共享主机上升级sqlite。我希望有一个旧版本的解决方案。考虑到混合了PHP5.2和5.3,很可能是由于sqlite库中的差异。可能是一个bug在你的Ubuntu安装发布时被修复了。我也这么认为。但问题是,我无法在共享主机上升级sqlite。我希望旧版本有一个解决方案。