问题描述
基于()信息,以尝试插入多行.
Based on this (How to insert an array into a single MySQL Prepared statement w/ PHP and PDO) information trying to insert multiple rows.
输入(多行)
<input type="text" name="date_day[]">
<input type="text" name="date_day[]">
<input type="text" name="amount[]">
<input type="text" name="amount[]">
从输入中获取值
$date_day = $_POST['date_day'];
print_r($date_day);
echo ' date_day with print_r<br>';
$amount = $_POST['amount'];
print_r($amount);
echo ' amount with print_r<br>';
由于print_r可以看到
As a result of print_r can see
Array([0] => 22 => 23)date_day和print_r
Array ( [0] => 22 1 => 23 ) date_day with print_r
Array([0] => 45 => 65)数量与print_r
Array ( [0] => 45 1 => 65 ) amount with print_r
然后从两个数组中创建一个数组
Then from two arrays want to create one array
$data = array_combine($date_day,$amount);
然后插入代码
$sql = "INSERT INTO 2_1_journal (TransactionPartnerNameOrDescription, DocumentName) VALUES ";
$insertQuery = array();
$insertData = array();
foreach ($data as $row) {
$insertQuery[] = '(?, ?)';
$insertData[] = $amount;
$insertData[] = $row;
}
if (!empty($insertQuery)) {
$sql .= implode(', ', $insertQuery);
$stmt = $db->prepare($sql);
$stmt->execute($insertData);
}
结果是:
将TransactionPartnerNameOrDescription列插入两行,并使用单词Array
column TransactionPartnerNameOrDescription are inserted two rows with word Array
将DocumentName列插入两行,分别为45和65($amount
数组)
column DocumentName are inserted two rows with 45 and 65 ($amount
array)
请告知为什么在TransactionPartnerNameOrDescription列而不是数组值中插入单词Array的问题?
Please advice why in column TransactionPartnerNameOrDescription instead of array values is inserted word Array?
我想它与此代码有关
$insertQuery = array();
$insertData = array();
foreach ($data as $row) {
$insertQuery[] = '(?, ?)';
$insertData[] = $amount;
$insertData[] = $row;
但是我不明白每一行的作用...可能是一些带有解释或类似示例的链接
but I do not understand what the each line does... may be some link with explanations or similar examples
使用$data = array_merge($date_day,$amount);
代替了$data = array_combine($date_day,$amount);
.
在这种情况下,为Document name列获取4行,其值分别为22、23、45、46.为TransactionPartnerNameOrDescription列获取单词Array
In this case get four rows for column Document name with values 22, 23, 45, 46. And word Array for TransactionPartnerNameOrDescription column
更新实际上,事情比乍看之下要简单
UpdateActually things are more simple than seems at first sight
这里是插入更多值的代码(作为其他人的示例;可能会有用)
Here is code to insert more values (as sample for someone else; may be will be useful)
$sql = "INSERT INTO 2_1_journal (RecordDay, RecordMonth, RecordYear, Amount) VALUES ";
$insertQuery = array();
$insertData = array();
foreach ($_POST['date_day'] as $i => $date_day) {
$insertQuery[] = '(?, ?, ?, ?)';
$insertData[] = $date_day;
$insertData[] = $_POST['date_month'][$i];
$insertData[] = $_POST['date_year'][$i];
$insertData[] = $_POST['amount'][$i];
}
还有一个问题
请告诉我什么意思(确实)
Please, advice what means (does)
$insertQuery = array();
$insertData = array();
是否只是简单地定义/设置$ insertQuery和$ insertData都是数组?
Does it simply define/set that $insertQuery and $insertData both are arrays?
这里有相关的内容 $ variable是什么?:[]做什么?但对我来说不能完全理解.请咨询
Something related is here What does $variable ?: [] do? but for me not fully understandable. Please, advice
推荐答案
foreach ($_POST['date_day'] as $i => $date_day) {
$insertQuery[] = '(?, ?)';
$insertData[] = $_POST['amount'][$i];
$insertData[] = $date_day;
}
是的
[]
是PHP 5.4以来array()
的简写,因此可以实现
And []
is a shorthand for array()
since PHP 5.4, so you can make it
$insertQuery = [];
$insertData = [];
或
$insertQuery = array();
$insertData = [];
或
$insertQuery = $insertData = [];
这篇关于需要php pdo内爆数组并在mysql中插入多行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!