【发布时间】:2017-07-04 18:32:16
【问题描述】:
我已经构建了下面的数组来插入从多行 html 表单传递到 MYSQL 数据库的多行。我遇到并且无法弄清楚的是如何修改我已经构建的内容以正确插入多行。我在下面提供了代码和示例。
<?php
include 'connect.php';
$records= array(
'palid' => $_POST['LPN'],
'auditor' => $_POST['ANAME'],
'itnum' => $_POST['Part'],
'ordid' => $_POST['Order'],
'pckusr' => $_POST['Picker'],
'expected' => $_POST['Eaches'],
'actual' => $_POST['Actual']);
$keys = implode(', ', array_keys($records));
$col = array();
foreach ($records as $rowValues) {
foreach ($rowValues as $key => $rowValue) {
$rowValues[$key] = $rowValues[$key];
}
$col[] = "(" . implode(', ', $rowValues) . ")";
}
$query = "INSERT INTO audit ($keys) VALUES " . implode (', ', $col);
echo $query;
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
?>
回声 $query;显示下面的内容,它只是将每列的所有三行的值连接在一起,而不是将每一行连接在一起。
INSERT INTO audit(palid, auditor, itnum, ordid, pckusr, expected, actual) VALUES(0010070382, 0010070382, 0010070382), (aud01, aud01, aud01), (2616M, 2216T, 1216F), (5167-2, 5167-2, 5167-2), (LION, LION, LION), (30, 300, 402), (30, 300, 402)
应该是这样的:
INSERT INTO audit(palid, auditor, itnum, ordid, pckusr, expected, actual) VALUES(0010070382, aud01, 2616M, 5167-2, LION, 30, 30), (0010070382, aud01, 2216T, 5167-2, LION, 300, 300), (0010070382, aud01, 1216F, 5167-2, LION, 402, 402)
当我使用 var_dump($records);该数组传递了以下信息,但我还没有弄清楚如何将信息形成每个关联的组,以将三行传递到我的 MYSQL 数据库中。
array(7)
{
["palid"] => array(3)
{
[0] => string(10) "0010070382"
[1] => string(10) "0010070382"
[2] => string(10) "0010070382"
}
["auditor"] => array(3)
{
[0] => string(5) "aud01"
[1] => string(5) "aud01"
[2] => string(5) "aud01"
}
["itnum"] => array(3)
{
[0] => string(5) "2616M"
[1] => string(5) "2216T"
[2] => string(5) "1216F"
}
["ordid"] => array(3)
{
[0] => string(6) "5167-2"
[1] => string(6) "5167-2"
[2] => string(6) "5167-2"
}
["pckusr"] => array(3)
{
[0] => string(4) "LION"
[1] => string(4) "LION"
[2] => string(4) "LION"
}
["expected"] => array(3)
{
[0] => string(2) "30"
[1] => string(3) "300"
[2] => string(3) "402"
}
["actual"] => array(3)
{
[0] => string(2) "30"
[1] => string(3) "300"
[2] => string(3) "402"
}
}
【问题讨论】:
-
警告:使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug。 切勿将$_POST或$_GET数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。