嘿伙计们没有寻找解释为什么它插入两次,我理解它从['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;?
答案 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);