xpdo - 将多维数组插入 db-table - 一次最多 5 行

xpdo - insert multidimensional arrays into db-table - up to 5 rows at once

我有一个表格,用户可以在其中添加最多 5 个具有不同值的计数器,除了通过输入和选择的许多不同的其他值。

大部分数据应写入不同的现有数据库-tables,到目前为止每个table.

都可以正常工作

到目前为止,我使用了一个现有脚本,该脚本能够在提交表单后将一行添加到不同的现有数据库-tables。

其中一个 table 称为 "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();
  }

table "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,它可以将所有数据一次插入到 db-table,但它使用数组来实现。

现在,在提交表单后,我根据发布的值创建了几个数组。 数组如下所示:

数组"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 看起来一样,都可以有不同的(键-)值(数字)。

我找到的脚本 如下所示:

// 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);
}