php - sqlite到mysql使用php
问题描述
我有一个每天将其数据写入 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();
}
?>
注意:我没有尝试过代码,所以如果您有任何问题,请告诉我。
推荐阅读
- java - 如何从 Firebase 实时数据库中检索最新条目?
- javascript - 单击按钮后删除标记 - 它会删除需要的内容
- python - 带有来自列名的新列的 Pandas 数据透视表
- tensorflow - 我面临一个空的training_Data
- flask - 如何在烧瓶中更新 JWT 身份?
- angular - Angular 8 - 自定义 HTTP 标头的 Spring Boot 服务器返回错误:MissingRequestHeaderException
- amazon-web-services - 块级与文件级存储
- fortran - Fortran 读取文本文件
- apache-spark - Spark Streaming Kafka - 如何在处理所有现有消息后停止流式传输(优雅地)
- javascript - 使用 setState 有条件地渲染后的 getElementById