首页 > 解决方案 > 将复杂的多维数组插入SQL,不起作用

问题描述

我已经找了好几天了,现在我要在这里问...我有 1 个数组,我想插入到 sql 中。但是数组的结构使它变得困难。

$the_array = [
    [
        "3_Bachelor",
        [
            3 => "English",
            4 => "German"
        ]
    ],
    [
        "3_Master",
        [
            1 => "Marketing",
            2 => "Accountancy"
        ]
    ]
];

这是第一次抽奖,不工作:

$id = "3";

$sql = "INSERT INTO users (id,i d_training_key ,training_lectures)
VALUES (:id, :id_training_key, :training_lectures)";
$stmt= $pdo->prepare($sql);
foreach ($the_array as $lec => $l) {
  foreach ($l as $a) {
    $stmt->execute($l[0], $id, $a);
  }
}

困难的部分在于阵列,阵列,阵列......你明白我的意思吗?

数据库看起来像“英语”和“德语”应该在一行中,每行重复“id”和“id_training_key”:id | id_training_key | 培训讲座

你们有什么想法或提示吗?如果您认为应该重组阵列,您的意见是什么?

非常感谢 !

标签: phparraysmultidimensional-arraypdo

解决方案


您的主要问题是您使用的是命名参数,但只传递了一个位置数组。

在循环中执行语句时,抢先绑定参数并execute()在没有任何参数的情况下调用通常会更简单。尝试这样的事情

$id_training_key = 3;
$sql = "INSERT INTO users (id, id_training_key, training_lectures)
    VALUES (:id, :id_training_key, :training_lectures)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(":id", $id);
$stmt->bindParam(":id_training_key", $id_trainging_key);
$stmt->bindParam(":training_lectures", $lang);

foreach ($the_array as [ $id, $langs ]) {
    foreach ($langs as $lang) {
        $stmt->execute();
    }
}

这将使用 like 执行插入

INSERT INTO users (id, id_training_key, training_lectures)
VALUES ('3_Bachelor', 3, 'English');

INSERT INTO users (id, id_training_key, training_lectures)
VALUES ('3_Bachelor', 3, 'German');

-- etc

推荐阅读