从索引数组的关联数组的数据列中插入数据库行
Insert database rows from columns of data from associative array of indexed arrays
我有一个名为 $works
的数组,它看起来像这样:
[
'type' => [1, 5],
'description' => [2, 6],
'hours' => [3, 7],
'amount' => [4, 8]
]
我需要在两次迭代中将所有值发送到数据库 (MySQL)。类似于:
INSERT INTO `works` (`type`, `description`, `hours`, `amount`) VALUES (works[type][0], works[decsription][0], works[hours][0], works[amount][0]);
INSERT INTO `works` (`type`, `description`, `hours`, `amount`) VALUES (works[type][1], works[description][1], works[hours][1], works[amount][1]);
for($i=0; $i<count($works['type']); $i++) {
$query = "INSERT INTO `works` (`type`, `decsripion`, `hours`, `amount`) VALUES ('{works[type][$i]}', '{works[description][$i]}', '{works[hours][$i]}', '{works[amount][$i]}')";
mysql_query($query);
}
前提是您已经连接并选择了数据库。
有更好的方法可以做到这一点,但这取决于您使用的框架。例如,您可能希望在尝试将这些值插入数据库之前对其进行转义。
嗨,你可以试试这个。
<?php
$works = array('type'=>array(1,5),'description'=>array(2,6),'hours'=>array(3,7),'amount'=>array(4,8));
$insert_query = 'INSERT INTO works(type,description,hours,amount) values ';
for($i=0; $i<count($works['type']); $i++) {
$insert_query .= "('".$works['type'][$i]."','".$works['description'][$i]."','".$works['hours'][$i]."','".$works['amount'][$i]."')," ;
}
$query = rtrim($insert_query, ',');
//echo $query;
if(!mysqli_query($con,$query)){
die('Error: ' . mysqli_error($con));
}else{
echo "record added";
}
在此我使用了 bulk insert into
如果您想查看 query
,您可以 echo
query
。根据你的问题,我假设所有 array
意味着 type
、description
等都是相同的 length
所以我用 $works['type']
来计算 for
loop
步
- 在进入循环之前定义准备好的语句。
- 通过访问
type
子数组并计算其元素来计算列数。
- 将整数值(使用计数器变量
$i
访问)绑定到准备好的语句。
- 执行prepared statement(你可以查看受影响的行)
代码:(Demo)
$works = [
'type' => [1, 5],
'description' => [2, 6],
'hours' => [3, 7],
'amount' => [4, 8]
];
if (!empty($works['type'])) {
$sql = "INSERT INTO works (type, description, hours, amount)
VALUES (?,?,?,?)";
$stmt = $mysqli->prepare($sql);
for ($i = 0, $count = count($works['type']); $i < $count; ++$i) {
$stmt->bind_param(
"iiii",
$works['type'][$i],
$works['description'][$i],
$works['hours'][$i],
$works['amount'][$i]
);
$stmt->execute();
}
}
var_export($mysqli->query("SELECT * FROM works")->fetch_all(MYSQLI_ASSOC));
输出:
array (
0 =>
array (
'id' => '1',
'type' => '1',
'description' => '2',
'hours' => '3',
'amount' => '4',
),
1 =>
array (
'id' => '2',
'type' => '5',
'description' => '6',
'hours' => '7',
'amount' => '8',
),
)
我有一个名为 $works
的数组,它看起来像这样:
[
'type' => [1, 5],
'description' => [2, 6],
'hours' => [3, 7],
'amount' => [4, 8]
]
我需要在两次迭代中将所有值发送到数据库 (MySQL)。类似于:
INSERT INTO `works` (`type`, `description`, `hours`, `amount`) VALUES (works[type][0], works[decsription][0], works[hours][0], works[amount][0]);
INSERT INTO `works` (`type`, `description`, `hours`, `amount`) VALUES (works[type][1], works[description][1], works[hours][1], works[amount][1]);
for($i=0; $i<count($works['type']); $i++) {
$query = "INSERT INTO `works` (`type`, `decsripion`, `hours`, `amount`) VALUES ('{works[type][$i]}', '{works[description][$i]}', '{works[hours][$i]}', '{works[amount][$i]}')";
mysql_query($query);
}
前提是您已经连接并选择了数据库。 有更好的方法可以做到这一点,但这取决于您使用的框架。例如,您可能希望在尝试将这些值插入数据库之前对其进行转义。
嗨,你可以试试这个。
<?php
$works = array('type'=>array(1,5),'description'=>array(2,6),'hours'=>array(3,7),'amount'=>array(4,8));
$insert_query = 'INSERT INTO works(type,description,hours,amount) values ';
for($i=0; $i<count($works['type']); $i++) {
$insert_query .= "('".$works['type'][$i]."','".$works['description'][$i]."','".$works['hours'][$i]."','".$works['amount'][$i]."')," ;
}
$query = rtrim($insert_query, ',');
//echo $query;
if(!mysqli_query($con,$query)){
die('Error: ' . mysqli_error($con));
}else{
echo "record added";
}
在此我使用了 bulk insert into
如果您想查看 query
,您可以 echo
query
。根据你的问题,我假设所有 array
意味着 type
、description
等都是相同的 length
所以我用 $works['type']
来计算 for
loop
步
- 在进入循环之前定义准备好的语句。
- 通过访问
type
子数组并计算其元素来计算列数。 - 将整数值(使用计数器变量
$i
访问)绑定到准备好的语句。 - 执行prepared statement(你可以查看受影响的行)
代码:(Demo)
$works = [
'type' => [1, 5],
'description' => [2, 6],
'hours' => [3, 7],
'amount' => [4, 8]
];
if (!empty($works['type'])) {
$sql = "INSERT INTO works (type, description, hours, amount)
VALUES (?,?,?,?)";
$stmt = $mysqli->prepare($sql);
for ($i = 0, $count = count($works['type']); $i < $count; ++$i) {
$stmt->bind_param(
"iiii",
$works['type'][$i],
$works['description'][$i],
$works['hours'][$i],
$works['amount'][$i]
);
$stmt->execute();
}
}
var_export($mysqli->query("SELECT * FROM works")->fetch_all(MYSQLI_ASSOC));
输出:
array (
0 =>
array (
'id' => '1',
'type' => '1',
'description' => '2',
'hours' => '3',
'amount' => '4',
),
1 =>
array (
'id' => '2',
'type' => '5',
'description' => '6',
'hours' => '7',
'amount' => '8',
),
)