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


Need php pdo implode arrays and insert multiple rows in mysql

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

输入(多行(

<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可以看到

数组([0]=>22 1=>23(date_day with print_r

阵列([0]=>45 1=>65(带有print_r 的数量

然后从两个阵列中创建一个阵列

$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

DocumentName列插入具有45和65($amount阵列(的两行

请说明为什么在TransactionPartnerNameOrDescription列而不是数组值中插入单词array?

我想它与这个代码有关

$insertQuery = array();
$insertData = array();
foreach ($data as $row) {
$insertQuery[] = '(?, ?)';
$insertData[] = $amount;
$insertData[] = $row;

但我不明白每一行是干什么的。。。可能与的解释或类似示例有某种联系

后者使用CCD_ 3而不是CCD_。

在本例中,为Documentname列获取四行,值分别为22、23、45、46。TransactionPartnerNameOrDescription列的单词数组

更新事实上,事情比乍一看更简单

以下是插入更多值的代码(作为其他人的示例;可能会有用(

$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];
}

还有一个问题

请问是什么意思

$insertQuery = array();
$insertData = array();

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

这里有一些相关的内容$variable是什么?:[]做什么?但对我来说,这不是完全可以理解的。请告知

foreach ($_POST['date_day'] as $i => $date_day) {
    $insertQuery[] = '(?, ?)';
    $insertData[] = $_POST['amount'][$i];
    $insertData[] = $date_day;
}

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

是的。

[]是自PHP 5.4以来array()的简写,因此您可以将其设为

$insertQuery = [];
$insertData = [];

$insertQuery = array();
$insertData = [];

$insertQuery = $insertData = [];