Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    302

    Inserimento più dati con un'unica query

    Ciao a tutti,
    ho una serie di dati che ricevo via GET in questo modo:

    /script.php?a=[[1,2,3,4],["quinto","sesto","settimo","ottavo"]]

    In questo caso sono solo 2 array, ma possono essere anche 100 (array di array).

    in pratica, vado a creare un array multidimensionale, che poi visualizzo sotto forma di tabella in questo modo:

    Codice PHP:
    $array json_decode($_GET['a'], true);

    print(
    '<table>');

    for(
    $i 0$i count($array); $i++) {  
      print(
    '<tr>');
        for(
    $ii 0$ii count($array[$i]); $ii++) {
            print(
    "<td>{$array[$i][$ii]}</td>");
        }
        print(
    '</tr>');
    }
    print(
    '</table>'); 

    e ho questo output:

    1 2 3 4
    quinto sesto settimo ottavo

    E fin qui, tutto bene. Ora, oltre che a visualizzarli, dovrei inserirli in un database mySQL.

    Il problema è che fare un loop sulla query mi sembra una follia, specie quando sono 100.
    C'è un modo per fare un'unica query inserendo tutto in una volta sola?

    Grazie a tutti

  2. #2
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    Codice PHP:
    $array json_decode($_GET['a'], true);

    $insertValues = array();

    print(
    '<table>');
    for(
    $i 0$i count($array); $i++) {
        print(
    '<tr>');
        for(
    $ii 0$ii count($array[$i]); $ii++) {
          print(
    "<td>{$array[$i][$ii]}</td>");
        }
        print(
    '</tr>');

        
    $insertValues[] = '("'implode($array[$i], '", "') . '")';
    }
    print(
    '</table>');  

    $query 'INSERT INTO table_name (column_1, column_2, column_3, column_4) VALUES 'implode($insertValues', ');

    // Esecuzione query, qui stampata solo per testecho '<pre>'. $query .'</pre>'; 

    PS: non dimenticare di filtrare l'input o lo script è a rischio sql injection, pericolosissime. Visto che potresti passare molti dati ti consiglio di usare il metodo POST al posto di GET.
    Ciao
    Daniele
    Lo Stato deve dare ai cittadini, come diritto, ciò che la mafia dà come favore.
    Carlo Alberto dalla Chiesa

    Facebook | Twitter | Last.fm | LinkedIn | Quora

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    302
    Ciao Daniele,
    alla fine avevo risolto così:

    Codice PHP:

    $sql 
    "INSERT INTO tabella (column_1, column_2, column_3, column_4) VALUES ";
    for(
    $i 0$i count($array); $i++) {

     
    $sql .= "("
        for(
    $ii 0$ii count($array[$i]); $ii++) {
             
    $sql .= ("'{$array[$i][$ii]}',");
        }
        

        
    $sql substr($sql0, -1);
        
         
    $sql .= "),";}

    $sql substr($sql0, -1); 
    il substr($sql, 0, -1) ho dovuto utilizzarlo per togliere le virgole in più che avevo aggiunto prima, poiché avevo sempre una virgola in più alla fine di ogni elemento e di ogni array in questo modo:

    [[1,2,3,4,],["quinto","sesto","settimo","ottavo",],]

    Non so se sia il metodo più corretto ma funziona abbastanza bene

    Ovviamente ho dovuto optare per il metodo POST come mi avevi consigliato, perché col GET (probabilmente per limiti di caratteri) sopra un certo numero di record mi restituiva errore.

    Grazie

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,337
    Forse anche cosi.

    Codice PHP:
    <?php 
    function mia_funzione($n
    {
        
    $n array_map("mia_funzione2"$n);
        return 
    '('.implode(',',$n).')';
    }
    function 
    mia_funzione2($n
    {
        return (
    "'".addslashes($n)."'");
    }

    $a = array([1,2,3,4],["quinto","sesto","settimo","ottavo"],["a",1,"b",2]);

    $b implode(',',array_map("mia_funzione"$a));
    $sql "INSERT INTO tabella (column_1, column_2, column_3, column_4) VALUES $b";
    print 
    $sql;
     
    ?>
    Dà :
    codice:
    INSERT INTO tabella (column_1, column_2, column_3, column_4) VALUES 
    ('1','2','3','4'),('quinto','sesto','settimo','ottavo'),('a','1','b','2')
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

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