2016-05-04 11 views
0

ich eine Liste von einem verschachtelten Array mit Tabellennamen, Feldnamen und Fieldwert, mit mir wiederholenden Tabellennamen zu erzeugen, dherstellen Insert-Anweisung aus drei Variablen

Table1, Field1, Value1 
Table1, Field2, Value2 
Table1, Field3, Value3 
Table2, Field1, Value1 
Table3, Field1, Value1 
Table3, Field2, Value2 
... 

, wo die Anzahl von Tabellen und Feldern von Array zu Array variiert Ich möchte ein INSERT schreiben, um die Werte in einer mysql-Tabelle zu erhalten. Zur Erzeugung des SQL Ich verwende:

function array2sql($tableName,$key,$element){ 
      if ($element){ 
      $sql="INSERT into $tableName ($key) values ($element);"; 
      } 
} 

, die in sich ergeb:

INSERT into Table1 (Field1) values (Value1); 
INSERT into Table1 (Field2) values (Value2); 
... etc. 

Gibt es einen besseren Weg, um die Insert-Anweisung zu erstellen?

Klärung auf dem Array, die die Variablen erzeugt:

Das Array verschachtelt ist, wobei die Anordnung Name der Tabellenname Satz verwendet wird, ist ähnlich wie diese:

Table1[(Field1=>Value1,Field2=>Value2, Field3=>Value3), 
    [Table2(Field1=>Value1), 
     [Table3(Field1=>Value1)] 
    ] 
] 

Die verschachtelten Arrays zuerst analysiert werden Verwerfen aller Unterfelder mit [0] als Schlüssel.

+0

Werte können 'insert in Tabelle 1 (Field1) Werte (x), (y), (z)' Sie nicht brauche auf jeden Einsatz –

+1

Ja gibt es! Niemals von außen stammende Daten direkt in SQL einbeziehen. Verwenden Sie vorbereitete Anweisungen. Aktivieren Sie auch die Emulation der vorbereiteten Anweisungen. Zumindest real_escape Strings, wenn Sie wirklich dynamische Bezeichner verwenden müssen. –

+0

Eine einzelne [vorbereitete Anweisung] (http://php.net/manual/en/pdo.prepared-statements.php) kann immer wieder verwendet werden, um Daten einzufügen. Das ist der einfachste Weg, dies zu tun. – tadman

Antwort

0

oder in einem Array wie folgt

$tab = array(
    array('table1','champ1','valeur1'), 
    array('table1','champ2','valeur2'), 
    array('table2','champ1','valeur1'), 
    array('table2','champ2','valeur2'), 
    array('table2','champ3','valeur3') 
    ); 

dann:

function array2sql($tab){ 
    $sql = ''; 
    $fields = ''; 
    $values = ''; 
    $extable = $tab[0][0]; 
    foreach($tab as $line) { 
     if ($extable == $line[0]) { 
      $fields .= $line[1].','; 
      $values .= $line[2].','; 
     } else { 
      $sql .= 'INSERT INTO ' . $extable . ' (' . rtrim($fields, ',') . ') VALUES (' . rtrim($values, ',') . ');'; 
      $fields = ''; 
      $values = ''; 
      $extable = $line[0]; 
     } 
    } 
    $sql .= 'INSERT INTO ' . $extable . ' (' . rtrim($fields, ',') . ') VALUES (' . rtrim($values, ',') . ');'; 
    return $sql; 
} 
+0

Leider ist mein Array multidimensional. –

Verwandte Themen