2015-09-23 25 views
1

我有搜索,但沒有看到任何符合我的代碼的答案或示例。我對MySQL/PHP很新,所以我可能不明白我看過的答案。 我有一個網頁發佈的數據,我想只使用一個插入。這是我到目前爲止插入的內容:MySQL單插入多行fom發佈數據數組

$statement1 = $link->prepare("INSERT INTO collection_items(collection_list_id, collection_item_number, username_id, collection_item_title, collection_item_text, created_date) 
    VALUES(:collection_list_id, :collection_item_number, :username_id, :collection_item_title, :collection_item_text, now())"); 
$statement1->execute(array(
    "collection_list_id" => $last_id, 
    "collection_item_number" => "1", 
    "username_id" => $user_number, 
    "collection_item_title" => $collection_item_title_1, 
    "collection_item_text" => $collection_item_text_1 
), 
(
    "collection_list_id" => $last_id, 
    "collection_item_number" => "2", 
    "username_id" => $user_number, 
    "collection_item_title" => $collection_item_title_2, 
    "collection_item_text" => $collection_item_text_2 
)); 

如果我放棄最後一組數據,它對一行工作得很好。我有大約20個來自頁面帖子的二十行數據。 TIA

這是我有,但無法得到它的工作。我顯示了更多的代碼來幫助。

$form = $_POST; 
$collection_item_title_1 = $form[ 'number1' ]; 
$collection_item_text_1 = $form[ 'comment1' ]; 
$collection_item_title_2 = $form[ 'number2' ]; 
$collection_item_text_2 = $form[ 'comment2' ]; 

$last_id = $link->lastInsertId(); 
$q= $link->query("SELECT id FROM sitelok WHERE Username='$slusername'"); 
$user_number = $q->fetchColumn(); 

$collection_item_titles = array($collection_item_title_1, $collection_item_text_1, $collection_item_title_2, $collection_item_text_2); 

$statement1 = $link->prepare("INSERT INTO collection_items(collection_list_id, collection_item_number, username_id, collection_item_title, collection_item_text, created_date) 
    VALUES(:collection_list_id, :collection_item_number, :username_id, :collection_item_title, :collection_item_text, now())"); 
    for ($i = 0; $i < size($collection_item_titles); $i++) 
    $statement1->execute(array(
    "collection_list_id" => $last_id, 
    "collection_item_number" => "$i", 
    "username_id" => $user_number, 
    "collection_item_title" => $collection_item_title[$i], 
    "collection_item_text" => $collection_item_text[$i] 
)); 
+0

順便說一句,而不是created_date'明確設置'成'NOW()'在DML,你可能想在MySQL的[自動初始化念起來更新TIMESTAMP和DATETIME](https://dev.mysq l.com/doc/en/timestamp-initialization.html)。 – eggyal

+0

謝謝,我檢查了它從v5.6.5開始,我使用的是5.6.23的Amazon RDS。當RDS更新時,我一定會更新。 – mrrrl

+0

5.6.23> 5.6.5。無論如何,它仍然可用於5.6.5之前的'TIMESTAMP'。 – eggyal

回答

0

您可以創建通過數據和而不是你在不同的變量數據的數組和循環($ collection_item_title_1,$ collection_item_title_2),你可以這樣做一些諸如$ collection_item_titles []然後依次通過這樣:

statement1 = $link->prepare("INSERT INTO collection_items(collection_list_id, collection_item_number, username_id, collection_item_title, collection_item_text, created_date) 
    VALUES(:collection_list_id, :collection_item_number, :username_id, :collection_item_title, :collection_item_text, now())"); 
    for ($i = 0; $i < size($collection_item_titles); $i++) 
    $statement1->execute(array(
    "collection_list_id" => $last_id, 
    "collection_item_number" => "$i", 
    "username_id" => $user_number, 
    "collection_item_title" => $collection_item_title[$i], 
    "collection_item_text" => $collection_item_text[$i] 
); 
+0

這是我所擁有的,但無法讓它工作。 – mrrrl

+1

這個答案讓我最接近。我不得不修改一下,但總體來說它的工作原理。謝謝 – mrrrl

0

你不能傳遞更多然後1參數execute 你可以在foreach環插入值或者創建擁有數百個佔位符的查詢。

我認爲第一種方式比較好,例如:

$values = array(); // your inserted values array here 
$statement1 = $link->prepare("INSERT INTO collection_items(collection_list_id, collection_item_number, username_id, collection_item_title, collection_item_text, created_date) VALUES(:collection_list_id, :collection_item_number, :username_id, :collection_item_title, :collection_item_text, now())"); 
foreach ($values as $v) { 
    $statement1->execute($v); 
}