Php 无法从sqlite读取blob数据
我用php存储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
$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),那么您有两个选项:
PS:如果这不是问题所在,并且您正在读取/写入相同的SQLite版本,那么您可以尝试对您试图存储的二进制数据进行十六进制编码,并将其保存为文本,而不是BLOB。这是一个解决方法,但它可以工作。确保您正在阅读和编写相同的SQLite版本,而不是: Server = SqLeIe2 C++=SqLITE2或Server=SqLeIe3 C++=SqLITE3,因为这将失败。 如果这就是问题所在(很可能是由于SQLite中的更改,导致两个版本不兼容,无法读取vise versa),那么您有两个选项:
PS:如果这不是问题所在,并且您正在读取/写入相同的SQLite版本,那么您可以尝试对您试图存储的二进制数据进行十六进制编码,并将其保存为文本,而不是BLOB。这是一个解决方案,但它是有效的。如果混合使用PHP5.2和5.3,很可能是由于sqlite库中的差异。可能是一个bug在你的Ubuntu安装发布时被修复了。我也这么认为。但问题是,我无法在共享主机上升级sqlite。我希望有一个旧版本的解决方案。考虑到混合了PHP5.2和5.3,很可能是由于sqlite库中的差异。可能是一个bug在你的Ubuntu安装发布时被修复了。我也这么认为。但问题是,我无法在共享主机上升级sqlite。我希望旧版本有一个解决方案。