Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在SQL中插入一个复杂的多维数组,但不起作用_Php_Arrays_Multidimensional Array_Pdo - Fatal编程技术网

Php 在SQL中插入一个复杂的多维数组,但不起作用

Php 在SQL中插入一个复杂的多维数组,但不起作用,php,arrays,multidimensional-array,pdo,Php,Arrays,Multidimensional Array,Pdo,我已经找了好几天了,现在我要问这里。。。 我有1个数组要插入到sql中。。然而,阵列的结构使其难以实现 $the_数组=[ [ “三学士”, [ 3=>“英语”, 4=>“德语” ] ], [ “3_大师”, [ 1=>“营销”, 2=>“会计” ] ] ]; 这是第一张图,不起作用: $id = "3"; $sql = "INSERT INTO users (id,i d_training_key ,training_lectures) VALUES (:id

我已经找了好几天了,现在我要问这里。。。 我有1个数组要插入到sql中。。然而,阵列的结构使其难以实现

$the_数组=[
[
“三学士”,
[
3=>“英语”,
4=>“德语”
]
],
[
“3_大师”,
[
1=>“营销”,
2=>“会计”
]
]
];
这是第一张图,不起作用:

$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);
  }
}
难度在于阵法,阵法,阵法。。。你明白我的意思吗

DB看起来像,“英语”和“德语”应该在一行中,每行重复“id”和“id\u training\u key”: id | id |培训|关键|培训|讲座

你们有什么想法或暗示吗? 如果你认为数组应该重组,你的看法是什么


非常感谢

你已经接近实现你想要的了

$id = "3";

$sql = "INSERT INTO users (id,id_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) {
    foreach($a as $training_lecture){
        $stmt->execute([':id' => $l[0], ':id_training_key' => $id, ':training_lectures' => $training_lecture);
    }
  }
}

这将以
插入用户(id、id\u培训密钥、培训讲座)值('3\u Master'、'3'、'English')的形式填充第一次迭代的查询。
。通过将execute语句替换为(参见示例1),然后在后面回显语句,您可以始终测试查询的外观。

您的主要问题是使用命名参数,但只传入位置数组

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

$id\u training\u key=3;
$sql=“插入用户(id、id\u培训密钥、培训讲座)
值(:id,:id_training_key,:training_讲座)”;
$stmt=$pdo->prepare($sql);
$stmt->bindParam(“:id”,$id);
$stmt->bindParam($id\u training\u key,$id\u training\u key);
$stmt->bindParam(“:培训讲座“,$lang);
foreach(_数组为[$id$langs]){
foreach($langs作为$lang){
$stmt->execute();
}
}
这将以类似的方式执行插入

插入用户(id、id\u培训密钥、培训讲座)
价值观(“3学士”,3“英语”);
插入用户(id、id、培训密钥、培训讲座)
价值观(“3学士”,3德语);
--等

为了帮助澄清,您希望用数组中的哪三个值填充查询?现在,您正在尝试为参数插入数组
training\u
-是否希望将英语和德语连接为字符串,或根据插入单独的行,或…?@TCooper thx用于注释和编辑;)下面的答案应该澄清您的所有问题:三个值被插入到db中的三个不同字段/列中。理想情况下,
培训课程
应作为单独的行插入。但是如果带分隔符的字符串是唯一的解决方案,那么我会接受它。你认为数组的当前结构适合这样的查询吗?你能给出一个SQL示例说明插入应该是什么样子吗?