需要php pdo内爆数组并在mysql中插入多行

问题描述:

基于如何将数组插入带有PHP和PDO的单个MySQL Prepared语句中)信息,以尝试插入多行.

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

Array ( [0] => 22 1 => 23 ) date_day with print_r

Array([0] => 45

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

更新 实际上,事情比乍看之下要简单

Update Actually 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;
}

是否只是简单地定义/设置$ insertQuery和$ insertData都是数组?

Does it simply define/set that $insertQuery and $insertData both are arrays?

是的

[]是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 = [];