php 操作 sqlite

起因

今天我们想“抄”一个App,做成一个网页,通过 代理拦截了一些数据,发现有些数据根本没有请求网络。

那么,问题来了。怎么费事?

通过压缩工具找到了zip压缩包,原来,App 内置了一些数据。

发现里面有些资源,还有个 sqlite 的文件数据库

通过PHP 解析sqlite 文件

既然是数据库,PHP当然可以解析(连接)了。

** 首先我竟然想到的是,通过百度查找,罪过,我堕落了,还是成长了?,以前的我首先想到的是从自身知识搜寻解决思路的。 **

首先映入眼帘的是 sqlite3 这个类,正在我打算尝试一番的时候,提示我,没有 sqlite3 类,当我准备打开扩展的时候,发现了,pdo_sqlite 扩展。

我一想对啊,PDO 是连接数据库的通用驱动,我干嘛非要用 sqlite3 类呢。于是 又来到了百度。

下面是我,查询sqlite 数据库中所有的表的例子。

<?php

// 注意,这里数据库文件和当前PHP文是同一个文件夹
    $dsn = 'sqlite:test.sqlite';

    $pdo = new PDO($dsn);
    
    $sql = "select * from sqlite_master where type='table'";
    $stmt = $pdo-> query($sql);
    if(!$stmt){
        var_dump($pdo -> errorInfo());
        exit;
    }
    $data = $stmt->fetchAll();
    print_r($data);

上面得出的结果和下面类似

// 没有使用 返回时的标志,所以 键名和数字索引混排,最后面的sql 就是建立这个数据库时用的 sql 语句
Array
(
    [0] => Array
        (
            [type] => table
            [0] => table
            [name] => TEST
            [1] => TEST
            [tbl_name] => TEST
            [2] => TEST
            [rootpage] => 2
            [3] => 2
            [sql] => CREATE TABLE "TEST" (
        "destId" INTEGER NOT NULL DEFAULT 0 PRIMARY KEY,
        "destName" TEXT NOT NULL DEFAULT ''
)
            [4] => CREATE TABLE "TEST" (
        "destId" INTEGER NOT NULL DEFAULT 0 PRIMARY KEY,
        "destName" TEXT NOT NULL DEFAULT ''
)
        )
)

既然使用的是PDO,所以其他方法和操作MySql一样。

插入数据
$sql = "INSERT INTO TEST (destId, destName) VALUES (:destId, :destName)";
$stmt = $pdo->prepare($sql);
$name = 'sunshine1';
$time = date('Y-m-d H:i:s');
$stmt->bindParam(':destId', 1);
$stmt->bindParam(':destName', 'test');
$stmt->execute();
更新数据
$sql = "UPDATE TEST SET name = :destName WHERE destId= :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([':destName' => 'sunshine1_updated', ':id' => 1]);
删除数据
$sql = "DELETE FROM user WHERE destId = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([':id' => 1]);

最后

这样就可以解析出sqlite数据库中的表的内容了,不过可以试试 Sqlite3 这个类,不过个人认为,还是使用PDO比较好。

阿杰博客
请先登录后发表评论
  • latest comments
  • 总共0条评论