内爆2个独立阵列?

时间:2011-05-06 23:40:20

标签: php mysql sql implode

我有一个带有查询的脚本,该查询使用连接从两个单独的表中收集数据库中的信息。现在我想在新表中并排插入这两个数组及其值。

$query = "INSERT INTO `new_table` 
            (column_a, column_b) 
          VALUES 
            (implode(something,$array_a), implode(something,$array_b))"

显然语法不对,但我想知道是否有可能或我是否走错了路。我尝试了一些查询,无法让他们排队插入 - 它一次爆炸一次。

2 个答案:

答案 0 :(得分:3)

正如您所料,这个问题的答案完全取决于您想要实现的目标。

我将假设您的两个数组如下(出于演示目的):

$arrayA = array(
  'Alpha' ,
  'Bravo' ,
  'Charlie'
);
$arrayB = array(
  'Zulu' ,
  'Yankee' ,
  'Xray'
);

现在,如果您想将这些值放入表格(称为 the_table 以便于参考),那么他们就像这样创建一行

column_a              | column_b
"Alpha,Bravo,Charlie" | "Zulu,Yankee,Xray"

然后你要生成的SQL是

INSERT INTO `the_table` ( `column_a` , `column_b` )
VALUES ( "Alpha,Bravo,Charlie" , "Zulu,Yankee,Xray" )

用于生成SQL的PHP​​可能是

$sqlTpl = 'INSERT INTO `the_table` ( `column_a` , `column_b` )
           VALUES ( "%s" , "%s" )';
$sqlStr = sprintf( $sqlTpl ,
            implode( ',' , $arrayA ) ,
            implode( ',' , $arrayB ) );

现在,如果您想要生成一组匹配的行,并且两个数组中的每一个都有一对,就像这样

column_a  | column_b
"Alpha"   | "Zulu"
"Bravo"   | "Yankee"
"Charlie" | "Xray"

SQL将是

INSERT INTO `the_table` ( `column_a` , `column_b` )
VALUES ( "Alpha" , "Zulu" ) ,
       ( "Bravo" , "Yankee" ) ,
       ( "Charlie" , "Xray" )

生成的PHP可能是

$sqlTpl = 'INSERT INTO `the_table` ( `column_a` , `column_b` )
           VALUES ( %s )';
$sqlArr = array();
foreach( $arrayA as $k => $v )
  $sqlArr[] = '"'.$arrayA[$k].'" , "'.$arrayB[$k].'"';
$sqlStr = sprintf( $sqlTpl ,
            implode( ' ) , ( ' , $sqlArr ) );

答案 1 :(得分:0)

使用:

$query = sprintf("INSERT INTO `new_table` 
                    (column_a, column_b) 
                  VALUES 
                    ('%s', '%s')",
                  implode(something, $array_a),
                  implode(something, $array_b));

也就是说,存储非规范化数据通常不是一个好主意。