gpt4 book ai didi

php - 使用 php 将 sqlite 转为 mysql

转载 作者:行者123 更新时间:2023-11-29 17:34:39 26 4
gpt4 key购买 nike

我有一个每天将数据写入 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com