MySQL插入两次PHP数组

时间:2014-03-03 20:57:52

标签: php mysql arrays

嘿伙计们没有寻找解释为什么它插入两次,我理解它从['0']循环到['1']只是想弄清楚如何在第一次尝试后停止插入...

$trans=array('hello' => 'allo',
             'bye' => 'salut'), 
$sql = "INSERT INTO trans (en, fr) values ";    
$valuesArr = array();
foreach ($trans as $key => $value){
    $en = mysql_real_escape_string( $key );
    $fr = mysql_real_escape_string( $value );
    $valuesArr[] = "('$en', '$fr')";
}

$sql .= implode(',', $valuesArr);

mysql_query($sql) or exit(mysql_error());

我的实际问题是,我可以在使用break后立即停止foreach;?

2 个答案:

答案 0 :(得分:2)

它一次插入两行(它没有按你提到的那样插入两次),因为你的$trans数组包含两个在foreach循环中迭代的项。在foreach循环后,$valuesArr等于:

[0] => ('hello', 'allo')
[1] => ('bye', 'salut')

然后,您使用implode以逗号作为分隔符连接$valuesArr元素,并使用$sql变量连接,从而产生最终的SQL查询:

INSERT INTO trans(en, fr) values ('hello', 'allo'),('bye', 'salut')

我想我不需要解释这个查询的作用。

答案 1 :(得分:1)

您可以使用计数器来控制插入物的构建 - 假设您需要2个插入中的第2个

$trans=array('hello' => 'allo','bye' => 'salut');
$sql = "INSERT INTO trans (en, fr) values ";    
$valuesArr = array();

$i = 0;
foreach ($trans as $key => $value){

    if ($i > 0) {
        $en = mysql_real_escape_string( $key );
        $fr = mysql_real_escape_string( $value );
        $valuesArr[] = "('$en', '$fr')";
    }
    $i++;

}

$sql .= implode(',', $valuesArr);