Php mysql 为相同的 table id 插入数组键值
Php mysql insert array key values for the same table id
我有一个如下所示的数组。
我需要为相同的 AdId
插入对应于每个索引的所有 ActionKey
和 ActionValue
的值
即)
第 0 个索引 - 短信 - 213123 和
第一次索引调用 - 12313
我正在尝试类似的东西,但没有成功。
$sDate = date("Y-m-d H:i:s");
$values = array();
$d_actionKey = $this->params()->fromPost('d_ActionKey');
$d_actionValue = $this->params()->fromPost('d_ActionValue');
$sql = "INSERT INTO `AdActions` (`CreatedDate`,`ActionKey`,`ActionValue`) VALUES";
foreach($values as $value) {
$values[] = "($sDate, $d_actionKey, $d_actionValue)";
}
我的 table 数据应该是这样的。
更新代码:
我需要从另一个 table 的最后插入值中获取 AdId。
然后获取最后插入的 AdId 并插入 AdActions
$adActionsInsert = $this->getAdLibraryTable()->saveAdd($dataArray);
$query='INSERT INTO `AdActions` (`AdId`,`CreatedDate`,`ActionKey`,`ActionValue`) VALUES ';
for($i=0; $i < count($adActionsArray['ActionKey']); $i++)
{
if($i!=0)
$query .= ', ';
$query .= sprintf("(%d,'%s', '%s', '%d')",
$adActionsInsert,
$adActionsArray['CreatedDate'],
$adActionsArray['ActionKey'][$i],
$adActionsArray['ActionValue'][$i]);
}
我能够像下面这样获得最后的插入值(来自模型文件)
$this->tableGateway->lastInsertValue;
根据Inserting multiple rows in mysql,一次插入多行时的数据集应该用逗号分隔,如
INSERT INTO table
(col1, col2)
VALUES
(data11, data12), -- first set of data, ended by comma
(data21, data22); -- second set of data
也就是说,在$values[] = "($sDate, $d_actionKey, $d_actionValue)
末尾加一个逗号,你可以用substr
把最后一句的逗号去掉,因为不需要。 (并注意 SQL 注入)
编辑
dataxy 将是 $d_actionKey 和 $d_actionValue
如果要将 $data 数组插入 table AdActions。
您可以像这样构建查询。
$data = [
'CreatedDate' => '2018-12-12 08:04:32',
'ActionKey' => [
0=>'sms',
1=>'call'
],
'ActionValue' => [
0 => 213123,
1 => 12313
]
];
$query='INSERT INTO `AdActions` (`CreatedDate`,`ActionKey`,`ActionValue`) VALUES ';
for($i=0; $i < count($data['ActionKey']); $i++)
{
if($i!=0)
$query .= ', ';
$query .= sprintf("('%s', '%s', '%d')",
$data['CreatedDate'],
$data['ActionKey'][$i],
$data['ActionValue'][$i]);
}
echo $query;
这应该会给你这样的查询
INSERT INTO `AdActions` (`CreatedDate`,`ActionKey`,`ActionValue`) VALUES ('2018-12-12 08:04:32', 'sms', '213123'), ('2018-12-12 08:04:32', 'call', '12313')
我不明白你为什么要使用
foreach($values as $value)
{
$values[] = "($sDate, $d_actionKey, $d_actionValue)";
}
自您声明后的部分 $values = array();
如果你的数组像
$arr = array(
'date' => '',
'ActionKeys' = > array(
[0] => 'sdsdsd',
[1] => 'fghfgh',
),
'ActionValues' = > array(
[0] => '345345',
[1] => '455496',
)
)
you can create values as
$ActionKeys = $arr[0]['ActionKeys'];
$ActionValues = $arr[0]['ActionValues'];
$date = $arr[0]['date']
$values = '';
for($i=0;$i<count();$i++){
if($i!=0)
$values.=','
else
$values.=' ($date, $ActionKeys[i], $ActionValues[i])';
}
then insert inside command add values as $values;
如果是数组就循环$arr;
我有一个如下所示的数组。
我需要为相同的 AdId
ActionKey
和 ActionValue
的值
即)
第 0 个索引 - 短信 - 213123 和
第一次索引调用 - 12313
我正在尝试类似的东西,但没有成功。
$sDate = date("Y-m-d H:i:s");
$values = array();
$d_actionKey = $this->params()->fromPost('d_ActionKey');
$d_actionValue = $this->params()->fromPost('d_ActionValue');
$sql = "INSERT INTO `AdActions` (`CreatedDate`,`ActionKey`,`ActionValue`) VALUES";
foreach($values as $value) {
$values[] = "($sDate, $d_actionKey, $d_actionValue)";
}
我的 table 数据应该是这样的。
更新代码:
我需要从另一个 table 的最后插入值中获取 AdId。 然后获取最后插入的 AdId 并插入 AdActions
$adActionsInsert = $this->getAdLibraryTable()->saveAdd($dataArray);
$query='INSERT INTO `AdActions` (`AdId`,`CreatedDate`,`ActionKey`,`ActionValue`) VALUES ';
for($i=0; $i < count($adActionsArray['ActionKey']); $i++)
{
if($i!=0)
$query .= ', ';
$query .= sprintf("(%d,'%s', '%s', '%d')",
$adActionsInsert,
$adActionsArray['CreatedDate'],
$adActionsArray['ActionKey'][$i],
$adActionsArray['ActionValue'][$i]);
}
我能够像下面这样获得最后的插入值(来自模型文件)
$this->tableGateway->lastInsertValue;
根据Inserting multiple rows in mysql,一次插入多行时的数据集应该用逗号分隔,如
INSERT INTO table
(col1, col2)
VALUES
(data11, data12), -- first set of data, ended by comma
(data21, data22); -- second set of data
也就是说,在$values[] = "($sDate, $d_actionKey, $d_actionValue)
末尾加一个逗号,你可以用substr
把最后一句的逗号去掉,因为不需要。 (并注意 SQL 注入)
编辑
dataxy 将是 $d_actionKey 和 $d_actionValue
如果要将 $data 数组插入 table AdActions。 您可以像这样构建查询。
$data = [
'CreatedDate' => '2018-12-12 08:04:32',
'ActionKey' => [
0=>'sms',
1=>'call'
],
'ActionValue' => [
0 => 213123,
1 => 12313
]
];
$query='INSERT INTO `AdActions` (`CreatedDate`,`ActionKey`,`ActionValue`) VALUES ';
for($i=0; $i < count($data['ActionKey']); $i++)
{
if($i!=0)
$query .= ', ';
$query .= sprintf("('%s', '%s', '%d')",
$data['CreatedDate'],
$data['ActionKey'][$i],
$data['ActionValue'][$i]);
}
echo $query;
这应该会给你这样的查询
INSERT INTO `AdActions` (`CreatedDate`,`ActionKey`,`ActionValue`) VALUES ('2018-12-12 08:04:32', 'sms', '213123'), ('2018-12-12 08:04:32', 'call', '12313')
我不明白你为什么要使用
foreach($values as $value)
{
$values[] = "($sDate, $d_actionKey, $d_actionValue)";
}
自您声明后的部分 $values = array();
如果你的数组像
$arr = array(
'date' => '',
'ActionKeys' = > array(
[0] => 'sdsdsd',
[1] => 'fghfgh',
),
'ActionValues' = > array(
[0] => '345345',
[1] => '455496',
)
)
you can create values as
$ActionKeys = $arr[0]['ActionKeys'];
$ActionValues = $arr[0]['ActionValues'];
$date = $arr[0]['date']
$values = '';
for($i=0;$i<count();$i++){
if($i!=0)
$values.=','
else
$values.=' ($date, $ActionKeys[i], $ActionValues[i])';
}
then insert inside command add values as $values;
如果是数组就循环$arr;