Dreamhost上使用SQLite与SQLite3的区别

最近琢磨着吧XBMC的电影资料库放到Dreamhost上,把收藏的高清电影的海报用Slideshow拿出来晒晒。

如何将XBMC的数据同步到网络上?
1.电影海报:
XBMC的电影海报通过thumbnail暂存在本地,可以直接拷贝到DH(使用cwRsync同步,又快又方便)。
thumbnail的命名与电影的关系参见XBMC Wiki,基本上就是将电影文件带目录的全名做一次hash,将得到的值加上文件后缀tbn就是缩略图了。

2.资料库:

XBMC的资料库使用的是轻量级的SQLite,以单个文件形式存储,所以同步方法也很简单,同缩略图一样直接rsync到DH。

传到DH的资料库需要通过PHP脚本调用,起先我是这样写的


$db = @sqlite_open("/xxx/resources/xbmc/userdata/Database/MyVideos34.db");
//异常处理
if (!$db) die("Connection Sqlite failed.\n");
//检索所有记录
$result = sqlite_query($db, 'select * from movie');
//打印获取的结果
print_r(sqlite_fetch_array($result, SQLITE_ASSOC));

结果返回错误说无法打开数据库,两眼一抹黑。Google下发现SQLite分2.0和3.0两个版本。DH的命令行里,输入sqlite进2.0,输sqlite3进3.0。phpinfo一看,sqlite模块编译时用的library是2.8,而XBMC为了支持unicode,使用了sqlite3(从3开始sqlite才支持unicode)。那如何使用sqlite3呢,再仔细看看phpinfo,发现DH还是提供了一条后路(dh的wiki上没写),就是pdo_sqlite模块,这个模块编译时用sqlite3的库。所以应该这样写成这样


$db = new PDO("sqlite:/xxx/resources/xbmc/userdata/Database/MyVideos34.db");
//异常处理
if (!$db) die("Connection Sqlite failed.\n");
//切换编码
$db->exec('PRAGMA encoding = "UTF-8"');
//检索所有记录
$result = $db->query('SELECT * FROM movie');
//打印获取的结果
var_dump($result->fetchAll());

一试果然灵验。

镜像链接:谷歌镜像 | 亚马逊镜像

分类: 科技, 编程 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.