我有以下数组:
Array
(
[step1] => 3
[step2] => Array
(
[1] => Array
(
[type] => 2
[price] => 312.5
)
[0] => Array
(
[type] => 1
[price] => 51.5
)
)
[step3] => Array
(
[first_name] => Test
[last_name] => Test
)
[step4] => Some answer
)
我想在数据库中插入。 Step2可以拥有用户想要的任意数量的项目。您可能已经注意到step2的2个数组之间存在差异。 step3还可以包含更多字段。这完全取决于用户。
它是动态的原因是因为用户可以管理仪表板中的表单输入字段。
我尝试为每个插入步骤做一个foreach循环,但这不能很好地工作。我想要做的是:具有动态查询,以便每个字段都可以插入数据库中。我认为最简单的方法是在step2上执行foreach循环,这样每个项目都有其他值。我的问题是如何使用mysqli(OOP)将这个多维数组中的所有数据插入到数据库中。
还检查了一些像这样的其他问题:
Inserting data into MySQL from a multidimensional array in php,
insert multiple rows via a php array into mysql,
insert php array into mysql
但这些对我没有帮助。所以implode()
不会帮助我。序列化也不会起作用,因为每个字段在数据库中都有自己的字段。 (当用户编辑数据库中仪表板字段中的表单时也会更改)
提前致谢
答案 0 :(得分:0)
我最终创建了第二个表来存放所有订单详细信息。我编辑的另一个表,它可以保存所有用户数据。 orders表还有一个userId链接。
然后我创建了一个插入所有用户数据的函数:
function insertUserData($array, $table) {
$tbl_fields = $this->tableFields($table);
$query = "INSERT INTO `user_orders` ("; // Query
foreach($array as $field => $value) {
if(array_key_exists($field, $tbl_fields)) {
$query .= "`$field`, ";
}
}
$query .= ") VALUES ("; // Add to query
foreach($array as $field => $value) {
if(array_key_exists($field, $tbl_fields)) {
$query .= "'$value', ";
}
}
$query .=")"; // End
//echo $query; //Query output
if($db->mysqli->query($query)) {
$insert_id = $db->mysqli->insert_id;
} else {
echo 'Something went wrong';
}
return $insert_id;
}
对于第2步,我可以执行以下操作:
foreach($data['stap2'] as $key => $array) {
$query = "INSERT INTO `orders` (";
foreach($array as $field => $value) {
if(array_key_exists($field, $table)) {
$query .= "`$field`, ";
}
}
$query .= "`order_id`) VALUES (";
foreach($array as $field => $value) {
if(array_key_exists($field, $table)) {
$query .= "'$value', ";
}
}
$query .= "'$insert_id')";
echo $query.'<br>';
}
我检查每个字段到表中的字段。如果它们相等,则将它们添加到查询中。这样我就创建了一个动态查询。 这解决了我的问题。