从三个变量创建插入语句

时间:2016-05-04 22:39:36

标签: php mysql

我从包含tablename,fieldname和fieldvalue的嵌套数组生成一个列表,并带有重复的表名,即

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

其中表和字段的数量因数组而异,我想写一个INSERT来保存mysql表中的值。使用:

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

导致:

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

有没有更好的方法来创建insert语句?

澄清生成变量的数组:

数组是嵌套的,用于设置表名的数组名称与此类似:

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

首先解析嵌套数组,丢弃任何以[0]为键的子数组。

1 个答案:

答案 0 :(得分:0)

或者像这样的数组

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

然后:

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;
}