内爆数组的输出不返回第一个实例(PHP)

时间:2013-07-09 14:27:51

标签: php mysql arrays insert

所以,我有一个数组,我正在组合创建一个INSERT命令。 (还没有完成消毒,只是一个概念证明)。

$namedata是"名称"的数据。字段(例如"此名称") $refdata是" Ref"的数据。字段(例如" 43857368") $CatRefData是我的数组(例如,' 23',' 45',' 2',' 144')

我的制定方法如下:

$inputdata = "'), ('".$namedata."', '".$refdata."', '";
  $data = implode($inputdata, $CatRefData);
  $result = "INSERT INTO `MyTable`('Name', 'Ref', 'Cat_Ref') VALUES ('".$data."')";

但输出结果是数组的第一个实例缺少任何额外的"非数组"数据,像这样:

  

$ result = INSERT INTO MyTable('姓名','参考',' Cat_Ref')价值观   (' 23'),('此名称',' 43857368',' 45'),('此名称' ;,' 43857368',   ' 2'),('此名称',' 43857368',' 144')

你能看到 - 第一个例子,数组值是' 23',没有任何周围的信息。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

我会这样做......

$arr = array();

foreach($CatRefData as $d) {
    $arr[] = "('".$namedata."', '".$refdata."', '".$d."')";

}

$data = implode(",",$arr);

但你应该做一些逃避...

答案 1 :(得分:1)

implode()只会添加连接文字BETWEEN值,因此如果您有:

$arr = array('a', 'b', 'c');
$newarr = implode('foo', $arr);

你最终会得到

afoobfooc

但实际上你需要

fooafoobfooc

这意味着您必须首先使用“加入”文本“填充”您的查询:

$result = "INSERT INTO `MyTable`('Name', 'Ref', 'Cat_Ref') VALUES ('$inputData"

答案 2 :(得分:0)

我认为你不能只用内爆来做到这一点。

尝试将其与array_map()一起使用 ,像这样:

$CatRefData = [ '23', '45', '2', '144'];
function surrounding($n)
{
     return "('something', '123', '".$n."')";
}
echo implode(", ",array_map("surrounding", $CatRefData));