Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    286

    importare i come per importare dati ip-to-country nel database

    come posso fare ad importare i dati ip-to-country nelle celle di un database!!
    Ho scritto un piccolo codice per inserire tutti i 53915 records del file ip-to-country.csv in un database sqlite,
    il codice è questo:
    Codice PHP:
    //apro il database
    $data file('ip-to-country.csv');
    foreach(
    $data as $value){
    $valori explode('"'$value);
    sqlite_query($db," INSERT INTO ip_to_country ('ip_in','ip_out','initials_2','initials_3','full_length') VALUES ('$valori[1]', '$valori[4]', '$valori[6]', '$valori[8]', '$valori[9]')");  
    }
    // chiudo il db 
    Dopo aver eseguito lo script ho capito che questa non può essere la via giusta per portare i dati nel database...
    Infatti dopo circa 10 minuti di esecuzione ne aveva inseriti poco + di 15000, tra l'altro ne ha saltati 3 o 4!!
    quindi lo script andrebbe pure migliorato in modo che non ne salti!!
    In realtà volevo sapere se esiste un'altro modo per importare il file csv...
    La formattazione del file è del tipo:
    "33996344","33996351","GB","GBR","UNITED KINGDOM"


    grazie
    kirk

  2. #2
    Prova così:

    codice:
    $data = file('ip-to-country.csv');
    
    foreach($data as $value){
    
        list($range_from, $range_to, $code2, $code3, $full_name) = explode(',', trim(str_replace('"', '', $value)));
    
        sqlite_query($db,"
    
            INSERT INTO ip_to_country
    
            ('ip_in', 'ip_out', 'initials_2', 'initials_3', 'full_length')
    
            VALUES (
            
                '{$range_from}',
                '{$range_to}',
                '" . addslashes($code2) . "',
                '" . addslashes($code3) . "',
                '" . addslashes(trim($full_name)) . "'
            
            )
    
        ");  
    }
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    286
    grazie GM,
    Ieri sera ho provato le modifiche che hai proposto tu...Il sistema sostanzialmente funziona.... è piuttosto lento, infatti credo ci abbia messo un'oretta per inserire tutti i dati...
    Cmq va ancora migliorato perchè chiama qualche errore saltando, ogni record che ha un apice.
    Per esmpio: "costa d'avorio" non lo inserisce nel database perchè chiama un errore di sintassi!!

    Secondo te un sistema con ciclo while così può funzionare bene o è ancora più lento??
    Codice PHP:
    <?php
    $handle 
    fopen("it-to-country.csv""r");
    while (!
    feof($handle)) {
        
    $buffer fgets($fd1096);
        echo 
    $buffer;
    }
    fclose($handle);
    ?>
    Chiaramente ogni riga che $buffer devo lavorarla per estrarre i dati che mi interessano
    Ciao
    kirk

  4. #4
    Mi pare strano l'errore sull'apice, perchè nel mio esempio uso addslashes proprio per evitarlo
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    286
    [supersaibal]Originariamente inviato da gm
    Mi pare strano l'errore sull'apice, perchè nel mio esempio uso addslashes proprio per evitarlo [/supersaibal]
    L'ho visto pure io che usi addslashes e in realà è sembrato pure a me strano...però ho controllato e tutti gli errori stampati a video corrispondevano proprio ai record che hanno un'apostrafo!!

    anyway stasera provo qualche alternativa....
    una curiosità perchè per inserire i dati nel database usi le parentesi graffe...che funzione hanno???
    esempio: ...VALUES ('{$range_from}', '{$range_to}',.....

    grazie
    kirk

  6. #6
    [supersaibal]Originariamente inviato da beipink
    una curiosità perchè per inserire i dati nel database usi le parentesi graffe...che funzione hanno???
    esempio: ...VALUES ('{$range_from}', '{$range_to}',.....

    grazie
    kirk [/supersaibal]
    http://www.php.net/manual/it/language.types.string.php
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  7. #7
    sqlite ha un "problema" di escape ed sqlite_escape non funziona come un mysql_escape
    http://it.php.net/manual/it/function...ape-string.php

    La funzione addslashes() NON dovrebbe essere utilizzata per inserire i caratteri di escape nelle query SQLite; questa porta a strani risultati quando si recuperano i dati.
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    ESEMPIO

    <?php
    $sqlite = &sqlite_open( 'testDatabase.sql' );
    @$query = &sqlite_unbuffered_query( $sqlite, "CREATE TABLE test ( id INTEGER PRIMARY KEY, dato VARCHAR(255) )" );

    $stringa_apice_singolo = "Ciao anto'";
    $stringa_apice_doppio = 'Ciao anto"';
    $stringa_apici_tra_doppi = "Ciao anto' , sempre in \"forma\" ?";
    $stringa_apici_tra_singoli = 'Ciao anto\\' , sempre in "forma" ?';

    // INSERISCO I DATI TRA APOSTROFI SINGOLI [ MODO CORRETTO DI ESCAPE ]
    sqlite_unbuffered_query( $sqlite, "INSERT INTO test VALUES ( NULL, '".sqlite_escape_string( $stringa_apice_singolo )."' )" );
    sqlite_unbuffered_query( $sqlite, "INSERT INTO test VALUES ( NULL, '".sqlite_escape_string( $stringa_apice_doppio )."' )" );
    sqlite_unbuffered_query( $sqlite, "INSERT INTO test VALUES ( NULL, '".sqlite_escape_string( $stringa_apici_tra_doppi )."' )" );
    sqlite_unbuffered_query( $sqlite, "INSERT INTO test VALUES ( NULL, '".sqlite_escape_string( $stringa_apici_tra_singoli )."' )" );

    // INSERISCO I DATI TRA APOSTROFI DOPPI
    sqlite_unbuffered_query( $sqlite, 'INSERT INTO test VALUES ( NULL, "'.sqlite_escape_string( $stringa_apice_singolo ).'" )' );
    sqlite_unbuffered_query( $sqlite, 'INSERT INTO test VALUES ( NULL, "'.sqlite_escape_string( $stringa_apice_doppio ).'" )' ); // ERRORE
    sqlite_unbuffered_query( $sqlite, 'INSERT INTO test VALUES ( NULL, "'.sqlite_escape_string( $stringa_apici_tra_doppi ).'" )' ); // ERRORE
    sqlite_unbuffered_query( $sqlite, 'INSERT INTO test VALUES ( NULL, "'.sqlite_escape_string( $stringa_apici_tra_singoli ).'" )' ); // ERRORE
    ?>



    CONCLUSIONE
    • Non utilizzare addslashes per inserire i dati su SQLite
    • Usare sempre gli apostrofi singoli per inserire i dati ( inteso non come query tra apostrofi singoli ma come stringe tra apostrofi singoli )



    ESEMPIO CORRETTO DI QUERY

    $query1 = 'INSERT INTO test VALUES ( NULL, \\''.sqlite_escape_string( $stringa_apici_tra_doppi ).'\\' )';
    $query2 = "INSERT INTO test VALUES ( NULL, '".sqlite_escape_string( $stringa_apici_tra_doppi )."' )";

    sqlite_unbuffered_query( $sqlite, $query1 ); // OK
    sqlite_unbuffered_query( $sqlite, $query2 ); // OK
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    286
    grazie mille veramente!!

    Alla fine per risolvere temporaneamente il problema avevo semplicemente tolto l'apostrafo....

    Ora ho impostato la query per ravanare tra i dati ed associare al mio ip il paese ed ecco un'altro errore!!
    cosa significa l'errore: Warning: sqlite_query(): 2 is not a valid sqlite database resource on line:
    sqlite_query($db,"SELECT country, code2 FROM ip_to_country WHERE $long BETWEEN ip_in AND ip_out");

    Una cosa che ho notato è che SQLite chiama errori pure se c'è uno spazio in più o in meno nella query...ogni volta devo perderci almeno 10 minuti per controllare, ma in questo caso questo è un errore nuovo!!


    ciao
    kirk

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.