php - 使用 php 将 sqlite 转为 mysql

标签 php mysql sqlite

我有一个每天将数据写入 SQLite 的应用程序。我现在想将此数据上传到我的网络主机中以供使用。因此,我有一个计划的 sFTP 脚本来将 .sqlite 文件上传到我的虚拟主机,然后运行另一个计划任务来运行 php 代码。 我知道我可以将 SQLite 与 PDO 一起使用,但主机上的所有其他数据都在 MySQL 中,因此我想将所有内容保留为 MySQL 格式。 我尝试编写一些 php 代码,通过 PDO 读取 sqlite 文件,然后使用 PDO 再次插入 MySQL 表中。该脚本有望在多个表上运行以进行导入,因此使用 foreach 和键/值,这样我就不必对每个表中的每一列进行硬编码(每个表大约 30 列)

但是我尝试了各种方法,但似乎无法找到为什么上述代码不起作用的问题,因此向更有头脑的用户寻求帮助。请查看我的代码。

谢谢

<?php
ini_set('max_execution_time', 480); //480 seconds = 8 minutes
try {
// Connect to MySQL database 
$host = '127.0.0.1';
$db   = 'coredb';
$user = 'root';
$pass = 'password';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
$pdomysql = new PDO($dsn, $user, $pass, $opt);

// Connect to SQLite database in file
$file_db = new PDO('sqlite:frp.sqlite');
$file_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT * from frp_teamdata';
$stmt = $file_db->prepare($sql);
$stmt->execute();
$sqliteresults = $stmt->fetch(PDO::FETCH_ASSOC);
foreach($sqliteresults as $results){
    foreach($results as $key => $value){
    $stmt = $pdomysql ->prepare("INSERT INTO frp_teamdata (name, value) VALUES (:name, :value)");
    $stmt->bindParam(':name', $key);
    $stmt->bindParam(':value', $value);
    $stmt->execute();
}
}

}
catch (PDOException $e) {
print 'Exception : ' . $e->getMessage();
}
?>

最佳答案

尝试一下:

<?php
    ini_set('max_execution_time', 480); //480 seconds = 8 minutes
    try {
        // Connect to MySQL database 
        $host = '127.0.0.1';
        $db   = 'coredb';
        $user = 'root';
        $pass = 'password';
        $charset = 'utf8mb4';
        $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
        $opt = [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES   => false,
        ];

        $pdomysql = new PDO($dsn, $user, $pass, $opt);

        // Connect to SQLite database in file
        $file_db = new PDO('sqlite:frp.sqlite');
        $file_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = 'SELECT * from frp_teamdata';
        $stmt = $file_db->prepare($sql);
        $stmt->execute();
        $sqliteresults = $stmt->fetch(PDO::FETCH_ASSOC);

        //Prepare the statement only once!
        $stmtmysql = $pdomysql ->prepare("INSERT INTO frp_teamdata (name, value) VALUES (:name, :value)");
        //Bind the params only once -- I assume the keys and values are strings
        $stmtmysql->bindParam(':name', $key, PDO::PARAM_STR);
        $stmtmysql->bindParam(':value', $value, PDO::PARAM_STR);

        foreach($sqliteresults as $results){
            foreach($results as $key => $value){
                $stmtmysql->execute();
            }
        }
    }
    catch (PDOException $e) {
        print 'Exception : ' . $e->getMessage();
    }
?>

注意:我还没有尝试过该代码,所以如果您有任何问题,请告诉我。

关于php - 使用 php 将 sqlite 转为 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50396378/

相关文章:

php - Mysql表中记录消失了,如何查看是怎么回事?

mysql - 从 MySQL 表中删除重复值的最佳方法是什么?

mysql - 加速连接表

mysql - 按名称排序未按预期工作 - MySQL

c++ - SQLite Visual Studio 链接器错误

Android mysql 到 sqlite 的转换

php - Jquery 操作成功后更新 TableView

php - 获取具有完成呈现和运行脚本的页面的当前样式(可能内联)的 HTML

javascript - 无法接收目标文件 Typeahead.js 中的值

数据库未加载到设备上,但可以在 Unity 编辑器上运行