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

时间:2013-05-12 17:27:46

标签: php mysql arrays pdo implode

基于尝试插入多行的thisHow to insert an array into a single MySQL Prepared statement w/ PHP and PDO)信息。

输入(多行)

<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] =&gt; 22 1 =&gt; 23)date_day with print_r

数组([0] =&gt; 45 1 =&gt; 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而不是数组值中插入word array?

我认为它与此代码相关

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

但我不明白每一行的作用......可能是与解释或类似例子有关的链接

使用$data = array_combine($date_day,$amount);来代替$data = array_merge($date_day,$amount);

在这种情况下,获取列文档名称的四行,其值为22,23,45,46。并且为TransactionPartnerNameOrDescription列提供单词Array

更新 事实上,事情比初看起来更简单

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

$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都是数组?

相关的东西在这里What does $variable ?: [] do?但对我来说并不完全可以理解。请,建议

1 个答案:

答案 0 :(得分:1)

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