2013-05-12 74 views
2

基於thisHow to insert an array into a single MySQL Prepared statement w/ PHP and PDO)信息試圖插入多行。需要php pdo implode陣列並在mysql中插入多行

輸入(多行)

<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

Array([0] => 45 1 => 65)amoun噸用的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

column DocumentName are in (45)和65($amount數組)

請指教爲什麼在列TransactionPartnerNameOrDescription而不是數組插入數組值?

我想這是與此代碼

$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列

更新 其實事情比較簡單比一見鍾情

似乎

這裏是代碼中插入更多的值(如樣品爲別人可以是將是有用的)

$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

,而從這樣的:'$數據= array_combine($ date_day,$ amount);' – 2013-05-12 17:38:11

+0

後者而不是$ data = array_combine($ date_day ,$金額);使用$ data = array_merge($ date_day,$ amount);.在這種情況下,對於列值爲22,23,45,46的列文檔名稱獲取四行。並且爲TransactionPartnerNameOrDescription列的字段數組 – user2360838 2013-05-12 17:40:22

+0

該數量如何存儲到名爲'TransactionPartnerNameOrDescription'的字段以及日期 - 存儲到'DocumentName'中。字段名稱看起來很不一致 – 2013-05-12 17:43:09

回答

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

謝謝。是否有鏈接提供有關答案中的代碼的信息?據我瞭解第一?綁定到$ insertData [] = $ date_day;第二個?綁定$ insertData [] = $ _POST ['amount'] [$ i];其實我需要插入更多的列。需要改變foreach($ _POST ['date_day']爲$ i => $ date_day){....但是如何...... – user2360838 2013-05-12 17:48:52

+0

不知道鏈接。可能是http://php.net/foreach – 2013-05-12 17:51:58