如何使用php将数组值存储在表的不同列中

时间:2018-03-22 13:12:09

标签: php mysql arrays

到目前为止,我已经尝试了以下代码:

$month = array('red','green','red');
$values = array();
foreach($month as $dataset)
{
   $values[] = ($dataset);
}

$columns = implode(", ",array_keys($values));
$escaped_values = array_values($values);
$valu  = implode(", ", $escaped_values);

$sql = "INSERT INTO abc (col1,col2,col3) VALUES ('$valu');";

这是输出:

  

错误:INSERT INTO abc(col1,col2,col3)VALUES('红色,绿色,红色');   列数与第1行的值计数不匹配

我要做的是将值存储在数组中,其中数组的值可能会根据用户提供的值而有所不同,然后将其存储在不同的列中。例如,如果总列数为3且数组值为2,则将值存储在col1和col2中,将值存储在col3中。

4 个答案:

答案 0 :(得分:1)

在整个字符串'red, green, red'周围使用单引号,该引号仅为col1的值。

看起来应该更像是'红色','绿色','红色'。

快速解决这个$valu = implode("','", $escaped_values);

在内爆中添加了一个引号。

外部引号将在最终声明中捕获,详见上述问题:

$sql = "INSERT INTO abc (col1,col2,col3) VALUES ('$valu');";

答案 1 :(得分:1)

使代码正常工作后的代码

$month = array('red','green','red');
$values = array();
foreach($month as $dataset)
{
  $values[] = "'{$dataset}'";
}

$columns = implode(", ",array_keys($values));
$escaped_values = array_values($values);
$valu  = implode(", ", $escaped_values);

$sql = "INSERT INTO abc (col1,col2,col3) VALUES ($valu);";

答案 2 :(得分:0)

值是单引号。请查看以下示例。

INSERT INTO abc (col1,col2,col3) VALUES ('red', 'green', 'red');

答案 3 :(得分:0)

似乎没有人解决实际问题。

  

我要做的是将值存储在值所在的数组中   数组的大小取决于用户给出的值,然后   将其存储在不同的列中。例如,如果总列数为3   并且数组值为2,然后将值存储在col1和col2以及null值中   在col3。

因此,如果值以不同长度的数组形式出现,并且您希望插入为null或限制为列的最大长度,则可以执行以下操作:

理想情况下,您希望生成一个类似于:

的数组
$data = [
    'col1' => 'red',
    'col2' => 'green',
    'col3' => null
];

为了做到这一点而没有任何循环定义数据库列,然后创建一个具有相同长度的空值的数组,然后将输入数组切片到相同的长度并合并,这将产生如上所示的数组。

<?php
$columns = [
    'col1',
    'col2',
    'col3',
];
$month = [
    'red',
    'green'
];

$data = array_combine(
    $columns, 
    array_slice($month, 0, count($columns))+array_fill(0, count($columns), null)
);

现在,您只需要将数组内嵌到查询中,使用?为准备好的查询添加占位符。

$sql = '
INSERT INTO abc (
    '.implode(', ', array_keys($data)).'
) VALUES (
    '.implode(', ', array_fill(0, count($data), '?')).'
)';

将产生:

INSERT INTO abc (
    col1, col2, col3
) VALUES (
    ?, ?, ?
)

然后进行查询,例如:

$stmt = $pdo->prepare($sql);
$stmt->execute($data);

简单干净,安全。