Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    84

    importazione dati csv in campo decimal mysql

    buonasera a tutti
    ho un problema con mysql alquanto stranino, che nn riesco a risolvere

    ho un database su un server CentOs con Parallel Plesk
    e importo quotidianamente dei dati da un file csv, e tutto fila liscio

    ho necessita di cambiare server del database, e ne ho uno con win2008 server, ho installato mysql 5.2 collegato all'applicativo e funziona perfettamente.

    ed ecco l'inghippo:
    quando arrivo a importare i dati ricevo un errore di incompatibilità tra tipi di dati che su plesk non ho mai avuto.
    nello specifico:

    nei campi del csv separati da ; come si vede sotto non c'è alcun valore

    codice HTML:
    "FLY FLOT";;;;;;;;;;;;;"30";
    e il campo del database è impostato in questo modo

    Tipo Null Predefinito
    decimal(20,6) No 0.000000

    qualcuno sa come aiutarmi se c'è una impostazione da fare una configurazione o qualcosa da settare nn so.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    84
    .... aiuto, forse non so neanche spiegare bene quel che succede ma chiedetemi pure, non c'è nessuno che ha una seppur vaga idea di cosa posso provare a fare?
    Ultima modifica di sirius; 31-03-2015 a 04:26

  3. #3
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    scusa, l'errore lo prendi su quale campo del tuo CSV?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    84
    tutti quei campi vuoti del csv, nel database sono campi decimali, mi da errore sul primo.
    Ultima modifica di sirius; 31-03-2015 a 11:13

  5. #5
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    mi viene il dubbio che il problema sia il NULL come predefinito del campo

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    84
    il predefinito è 0.000000

    non so se sia un problema di funzionamento dello script, perke su plesk funziona perfettamente.
    immaginavo una cosa del tipo:
    modalità di apertura del database o una configurazione di mysql server.
    Ultima modifica di sirius; 31-03-2015 a 11:48

  7. #7
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Come tenti il caricamento del file?

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    84
    prima di tutto vengono svuotate le tabelle in scrittura cosi da azzerare i campi contatore.
    una volta recuperato i dati dal csv e caricati in un'array riga per riga vengono scritte le tabelle.

    questa è la query di inserimento

    Codice PHP:
    function sql_product($x,$y) {
    $val =    "REPLACE `"._DB_PREFIX_."product`(
            `id_product`,`id_category_default`,`id_shop_default`,`id_tax_rules_group`,`on_sale`,
            `online_only`,`ecotax`,`minimal_quantity`,`price`,`wholesale_price`,`unity`,`unit_price_ratio`,
            `additional_shipping_cost`,`customizable`,`uploadable_files`,`text_fields`,`active`,`redirect_type`,
            `id_product_redirected`,`available_for_order`,`condition`,`indexed`,
            `cache_default_attribute`,`advanced_stock_management`,
            `reference`,`supplier_reference`,`location`,`width`,`height`,`depth`,`weight`,`out_of_stock`,`quantity_discount`,
            `cache_is_pack`,`cache_has_attachments`,`is_virtual`,`id_supplier`,`id_manufacturer`,`ean13`,`upc`,`quantity`,
            `date_add`, `date_upd`, `available_date`
            ) VALUES ("
    .(int)$x.",".$y."'".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
            return 
    $val;

    Questo è lo script che scrive fisicamente i record.

    Codice PHP:
                if (!Db::getInstance()->query(sql_product($pid,$arystr[0].",".$riga))) {
                    echo 
    sql_product($pid,$arystr[0].",".$riga)."<br>";
    scriviriga ("Errore      ",Db::getInstance()->getNumberError()." - ".Db::getInstance()->getMsgError(),$filedilog);
                    die(
    '<p>Error: '.Db::getInstance()->getNumberError()." - ".Db::getInstance()->getMsgError()).'<br>$riga</p>';
                    } {
    //scriviriga ("Scrittura"," sql_product ",$filedilog);
                    
    if ((int)$_GET['output'] == 1) {echo "<p>Articolo ID $row[0] Aggiunto/Aggiornato in product</p>";}
                } 
    scriviriga è una funzione per tenere un log di quello che avviene.

  9. #9
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    ma non è che hai un problema nella variabile $riga?
    contiene l'intera riga con i ";"?

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    84
    La variabile riga la ottengo cosi:

    Codice PHP:
            for ($i 2$i 41$i++) {
                if (
    is_numeric($row[$i]) && !$row[$i] == 404) {
                    
    $riga $riga.(int)$row[$i].","# valorizzo riga con tutti i campi di interesse nel formato valore,valore, ....
                
    } else {
                        
    $riga $riga."'".escapestring($row[$i])."',"# valorizzo riga con tutti i campi di interesse nel formato 'valore','valore', ....
                    
    }
                }
            } 
    questa è la parte di csv della tabella che da errore.
    Ultima modifica di sirius; 01-04-2015 a 12:01

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.