到目前为止,我已经尝试了以下代码:
$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中。
答案 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);
简单干净,安全。