2

これに基づいて( 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] => 22 1 => 23 ) date_day with print_r

配列 ( [0] => 45 1 => 65 ) print_r での金額

次に、2 つの配列から 1 つの配列を作成したい

$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 を含む 2 行に挿入されます

列 DocumentName は、45 と 65 の 2 つの行が挿入されます ($amount配列)

配列値の代わりにTransactionPartnerNameOrDescription列にword Arrayが挿入される理由を教えてください。

私はそれがこのコードに関連していると思います

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

しかし、各行が何をするのか理解できません...説明や同様の例へのリンクかもしれません

$data = array_combine($date_day,$amount);usedの代わりに後者$data = array_merge($date_day,$amount);

この場合、値が 22、23、45、46 のドキュメント名列の 4 つの行を取得します。また、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];
}

もう1つの質問

何を意味するかアドバイスしてください

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

$insertQuery と $insertData の両方が配列であることを定義/設定するだけですか?

関連するものはこちら$variable ?: [] は何をしますか? しかし、私には完全には理解できません。ご意見をお聞かせください

4

1 に答える 1

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

$insertQuery と $insertData の両方が配列であることを定義/設定するだけですか?

はい。

and[]は PHP 5.4 以降の省略形なarray()ので、作成できます

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

また

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

また

$insertQuery = $insertData = [];
于 2013-05-12T17:41:02.710 に答える