0

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

$namedata是“名称”字段的数据(例如“This Name”) $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('Name', 'Ref', 'Cat_Ref') VALUES ('23'), ('This Name', '43857368', '45'), ('This Name', '43857368', '2'), ('这个名字', '43857368', '144')

你能看到 - 第一个实例,其中数组值为“23”,没有任何周围信息。

我究竟做错了什么?

4

3 回答 3

1

implode()仅在值之间添加连接文本,因此如果您有:

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

你最终会得到

afoobfooc

但你实际上需要

fooafoobfooc

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

$result = "INSERT INTO `MyTable`('Name', 'Ref', 'Cat_Ref') VALUES ('$inputData"
于 2013-07-09T14:38:44.577 回答
1

我会这样做...

$arr = array();

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

}

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

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

于 2013-07-09T14:38:03.937 回答
0

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

尝试将它与array_map()一起使用 ,如下所示:

$CatRefData = [ '23', '45', '2', '144'];
function surrounding($n)
{
     return "('something', '123', '".$n."')";
}
echo implode(", ",array_map("surrounding", $CatRefData));
于 2013-07-09T14:38:27.587 回答