Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Convertire db Mysql inSQLite

    ciao!

    avrei la necessità di convertire il db mysql in sqlite "alla bisogna".
    in modo da poter usare il db sqlite in altre applicazioni esportabili.
    il db, però, sta su hosting condiviso (aruba) e non ho possibilità di accedere alla riga di comando.
    quindi pensavo di fare questa operazione tramite php.
    script da richiamare manualmente o tramite scheduler (che aruba mette a disposizione).

    sapete se tramite php è possibile fare questa operazione??

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    L'unica soluzione che mi viene in mente è di replicare la struttura sul db sqlite e poi con delle query leggere il contenuto tabella per tabella sul primo db e popolare la tabella omologa sull'altro.

  3. #3
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    L'unica soluzione che mi viene in mente è di replicare la struttura sul db sqlite e poi con delle query leggere il contenuto tabella per tabella sul primo db e popolare la tabella omologa sull'altro.
    ok.
    quindi in sostanza mi creo il db con le stesse tabelle vuote.
    lo carico nello spazio web.
    e poi lo riempio.
    potrebbe andare.
    provo a vedere che esce fuori e ti dico!

  4. #4
    allora, con questo script ho creato la prima versione del db: https://gist.github.com/esperlu/9437...ysql2sqlite-sh
    in pratica, dopo aver fatto il dump del mysql, si lancia quello script sh.
    quello script crea il corrispettivo sqlite3.

    dopo di che ho fatto come mi hai indicato.
    per ora ho fatto così:
    - cancello tutti i record
    - prendo quelli da mysql
    - li aggiungo:
    Codice PHP:
    class ConnessioneMobile {

        private 
    $pdo;

        public function 
    __construct() {
            try {
                
    $this->pdo = new PDO('sqlite:db.sqlite');
            } catch (
    PDOException $e) {
                echo 
    '<p class="error">' $e->getMessage() . '</p>';
                die();
            }
        }

        public function 
    movimenti($rows) {
            try {
                
    $delete 'DELETE FROM movimenti';
                
    $prepareDelete $this->pdo->prepare($delete);
                
    $prepareDelete->execute();
                foreach (
    $rows as $r) {
                    
    $insert 'INSERT INTO movimenti VALUES(?,?,?,?,?,?,?,?,?)';
                    
    $arr = array(
                        
    $r['mov_id'], $r['mov_tipo'], $r['mov_valore'], $r['mov_causale_fk'],
                        
    $r['mov_conto_fk'], $r['mov_data'], $r['mov_note'], $r['mov_utente_fk'],
                        
    $r['mov_aggiunta']
                    );
                    
    $prepareInsert $this->pdo->prepare($insert);
                    
    $prepareInsert->execute($arr);
                }
            } catch (
    PDOException $e) {
                echo 
    $e->getMessage();
            }
        }


    alla funzione passo l'array con i record.

    se lo setto ogni sera potrei anche pensare di aggiungere solo i record del giorno.
    però vorrei anche avere la possibilità di aggiornare i record a mano, evitando doppioni.
    quindi:
    - è meglio controllare record per record se già esiste e in caso inserirlo?
    - oppure cancellare e rimettere?

    purtroppo penso che sqlite non ha l'istruzione ON DUPLICATE KEY di mysql.

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Suppongo che le primary key sui due db coincidano, giusto? In tal caso dovresti già essere a posto, l'inserimento di un record con primary key già presente dovrebbe impedirtelo il db di suo, senza fare altro, l'unica cosa è che dovrai vedere se l'inserimento viene semplicemente ignorato oppure se genera un errore che ti ferma lo script. Con sqlite non ho grande esperienza.

    In alternativa per ogni insert metti un if per verificare prima se il record che stai inserendo esiste già.
    Cancellare tutto e reinserire tutti i dati mi sembra uno spreco enorme, finché i record sono pochi ok, ma poi diventa improponibile.
    Ultima modifica di Alhazred; 17-06-2016 a 13:44

  6. #6
    ok faccio un pò di prove con entrambe le soluzioni e vediamo.

    scarto l'ipotesti di cancellare tutto.

    vi aggiorno!

  7. #7
    allora.

    ho fatto un pò di prove eliminando a mano alcuni record in mezzo, e ricaricandoli.
    pare che li riaggiunga con l'id giusto, senza duplicarli.
    quindi, se trova un id già esistente, semplicemente va oltre e prosegue.
    a quanto pare non devo mettere un controllo sull'esistenza di quell'id.

    quindi si comporta in maniera differente da mysql o sbaglio?

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Anche con MySQL, almeno usando mysqli, la query che tenta di inserire una primary key duplicata produce un errore, ma non blocca l'esecuzione dello script, le query seguenti comunque vengono eseguite.

  9. #9
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Anche con MySQL, almeno usando mysqli, la query che tenta di inserire una primary key duplicata produce un errore, ma non blocca l'esecuzione dello script, le query seguenti comunque vengono eseguite.
    ah ok.
    buono a sapersi.

    grazie!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.