sqlite в mysql используя php - PullRequest
0 голосов
/ 17 мая 2018

У меня есть приложение, которое ежедневно записывает данные в SQLite. Теперь я хочу загрузить эти данные на мой веб-хост для использования. Итак, у меня есть запланированный сценарий sFTP для загрузки файла .sqlite на мой веб-хост, а затем запускаю другое запланированное задание для запуска кода php. Я знаю, что могу использовать SQLite с PDO, но все остальные мои данные на хосте находятся в MySQL, поэтому я хочу сохранить все в формате MySQL. Я попытался написать код php, который будет читать файл sqlite через PDO, а затем снова вставлять в таблицу MySQL с помощью PDO. Надеемся, что скрипт будет выполняться для нескольких таблиц для импорта, поэтому используйте 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();
}
?>

1 Ответ

0 голосов
/ 17 мая 2018

Попробуйте:

<?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();
    }
?>

Примечание: я не пробовал код, поэтому дайте мне знать, если у вас возникнут проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...