需要php pdo内爆数组并在mysql中插入多行 [英] Need php pdo implode arrays and insert multiple rows in mysql

查看:67
本文介绍了需要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 = [];

这篇关于需要php pdo内爆数组并在mysql中插入多行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆