基于尝试插入多行的this(How 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?但对我来说并不完全可以理解。请,建议
答案 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 = [];