我用这样的
存储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框架)我从blob列中读取数据。问题是,当我在我的localhost(版本5.3.2-1ubuntu4.2)上使用php时,我的c ++应用程序可以正确识别blob列为blob类型。但是当我使用我的远程主机(php版本5.2.12)创建sqlite文件时,我的c ++应用程序将blob列识别为TEXT TYPE并且我的二进制数据已损坏。
有谁知道为什么和任何解决方法?
由于
答案 0 :(得分:0)
确保您正在阅读和编写相同的SQLite版本,而不是: Server = SQLite2< - > C ++ = SQLite2或Server = SQLite3< - > C ++ = SQLite3因为那会失败。
如果这是问题(最有可能的原因是SQLite中的更改导致两个版本不兼容,反之亦然),您有两个选择:
希望你的船晃动。 ;)
PS:如果这不是问题并且您正在读/写相同的SQLite版本,您可以尝试对要尝试存储的二进制数据进行十六进制编码,并将其保存到TEXT而不是BLOB。这是一种解决方法,但它确实有效。