我有一个表单,用户可以在其中添加最多 5 个具有不同值的计数器,此外还可以通过输入和选择添加许多不同的其他值。
大部分数据应写入不同的现有数据库表,到目前为止每个表都运行良好。
到目前为止,我使用了一个现有脚本,该脚本能够在提交表单后向不同的现有数据库表添加一行。
其中一个表称为“zaehler_test”,它需要从用户可以在表单中添加的 $_POST 值中为每个计数器插入一行。这个编辑过的脚本能够做到这一点:
$sql_str = $xpdo->prepare("INSERT INTO zaehler_test (id, k_id, z_id, zaehlertyp, befestigung, messung, wandlerfaktor, eigentumwandler, zaehlerart, spannungsebene, zugang, anmerkungen) VALUES (:id, :k_id, :z_id, :zaehlertyp, :befestigung, :messung, :wandlerfaktor, :eigentumwandler, :zaehlerart, :spannungsebene, :zugang, :anmerkungen)");
$sql_str->bindParam (":id", $id);
$sql_str->bindParam (":k_id", $id);
$sql_str->bindParam (":z_id", $_POST['zaehlernummer']);
$sql_str->bindParam (":zaehlertyp", $_POST['zaehlertyp']);
$sql_str->bindParam (":befestigung", $_POST['befestigung']);
$sql_str->bindParam (":messung", $_POST['messung']);
$sql_str->bindParam (":wandlerfaktor", $_POST['wandlerfaktor']);
$sql_str->bindParam (":eigentumwandler", $_POST['eigentumwandler']);
$sql_str->bindParam (":zaehlerart", $_POST['zaehlerart']);
$sql_str->bindParam (":spannungsebene", $_POST['spannungsebene']);
$sql_str->bindParam (":zugang", $_POST['zugang']);
$sql_str->bindParam (":anmerkungen", $_POST['anmerkungen']);
try{
$sql_str->execute();
}
表“zaehler_test”如下所示:
+----+------+------+------------+-------------+---------+---------------+-----------------+------------+----------------+--------+-------------+
| id | k_id | z_id | zaehlertyp | befestigung | messung | wandlerfaktor | eigentumwandler | zaehlerart | spannungsebene | zugang | anmerkungen |
+----+------+------+------------+-------------+---------+---------------+-----------------+------------+----------------+--------+-------------+
| 1 | 1234 | 1234 | 1 | 2 | 3 | 25 | 4 | 2 | 0 | 1 | 3 |
+----+------+------+------------+-------------+---------+---------------+-----------------+------------+----------------+--------+-------------+
所以到目前为止效果很好。但现在我需要从用户可能在表单中添加的其他可能的计数器获取数据。
我首先尝试通过简单地复制脚本并编辑相关的 $_POST 变量来为每个计数器逐一插入数据,但这不起作用。
经过大量研究,我偶然发现了 script ,使用它它可能能够一次将所有数据插入到数据库表中,但它使用数组来执行此操作。
现在,在提交表单后,我根据发布的值创建了几个数组。 数组看起来像这样:
数组“zaehler1”
Array
(
[id] => db6aac9dbe239c0e0095afee9d74cab4_879012
[k_id] => db6aac9dbe239c0e0095afee9d74cab4_879012
[z_id] => 111
[zaehlertyp] => 1
[befestigung] => 1
[messung] => 1
[wandlerfaktor] =>
[eigentumwandler] => 0
[zaehlerart] => 1
[spannungsebene] => 1
[zugang] => 2
[anmerkungen] =>
)
数组“zaehler2”
Array
(
[id] => db6aac9dbe239c0e0095afee9d74cab4_879012
[k_id] => db6aac9dbe239c0e0095afee9d74cab4_879012
[z_id] => 222
[zaehlertyp] => 2
[befestigung] => 1
[messung] => 1
[wandlerfaktor] =>
[eigentumwandler] => 0
[zaehlerart] => 1
[spannungsebene] => 1
[zugang] => 2
[anmerkungen] =>
)
数组 3 到 5 看起来相同,都可以有不同的(键)值(数字)。
我找到的脚本at the earlier mentioned link看起来像这样:
// multiple queries
$stmt = $pdo->prepare('INSERT INTO table SET memberID=:memberID, programID=:programID, date_added=NOW()');
$data = array(155, 165, 175, 185);
foreach($data as $d) {
$stmt->execute(array(':memberID' => $memberid, ':programID' => $d));
}
我尝试使其适应我的需求,并希望首先仅使用第一个数组并且仅使用一些数据进行尝试,但我失败了。这是我到目前为止所得到的:
// multiple queries
$stmt = $xpdo->prepare('INSERT INTO zaehler_test SET id=:id, k_id=:k_id, z_id=:z_id');
$data = $zaehler1;
foreach($data as $d) {
$stmt->execute(array(':id' => $id, ':k_id' => $id, ':z_id' => $d));
}
通过使用此脚本,我添加了 12 行(每个数组键一行),这显然是错误的。我希望在一行中添加每个键的相关值。之后,我想尝试如何让它与我上面提到的最多 5 个数组一起工作。
有人可以引导我走向正确的方向吗,经过几个小时的尝试和研究,我有点迷失了。
感谢您的宝贵时间!
最佳答案
Modx - xPDO is our name for open eXtensions to PDO. It's a light-weight ORB (object-relational bridge) library built directly on PDO. It implements the very simple, but effective Active Record pattern for data access
试试这个:
//express each set of values in to a separate array
$data = array(
[155, 165, 175],
[155, 165, 175]
);
$stmt = $xpdo->prepare('INSERT INTO zaehler_test SET id=?, k_id=?, z_id=?');
foreach($data as $d) {
$stmt->execute($d);
}
关于php - xpdo - 将多维数组插入 db 表 - 一次最多 5 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59150340/