2012-07-19 20 views
0

我有我的第一個問題回答這裏:link循環通過陣列插入如果ID

我擴展的問題是,我可以成功地更新行插入到數據庫,但由於某些原因,我不能當的itemid = 0插入?下面的代碼,如果我這樣做,增加了另外8行?:

for ($i = 0; $i < count($values); $i++) 
{ 
$item   = $values['item'][$i]; 
$description = $values['description'][$i]; 
$rate   = $values['rate'][$i]; 
$itemid   = $values['itemid'][$i]; 

if($itemid) 
{ 
    // Update item 
    $query = "UPDATE `invoice_items`..."; 
} 
else 
{ 
    // Add new item 
    $query = "INSERT INTO `invoice_items`...'; 
} 

} 

更新

這裏是我現在,但我仍然插入額外的7個項目的數據庫當我只更新項目:

foreach ($outArray as $row) 
{ 
$item   = $row['item']; 
$description = $row['description']; 
$rate   = $row['rate']; 
$qty   = $row['qty']; 
$price   = $row['price']; 
$itemid   = $row['itemid']; 

if($row['itemid'] >= 1) 
{ 
    $query = "UPDATE `invoice_items` SET `item` = '?', `description` = '?', `rate` = '?', `qty` = '?', `price` = '?' WHERE `id` = '?' LIMIT 1;"; 
    $query_prepare = $this->prep_q($query,array($item,$description,$rate,$qty,$price,$itemid)); 
} 
else 
{ 
    $query = "INSERT INTO `invoice_items` (`item`,`invoice_id`,`description`,`rate`,`qty`,`price`) VALUES ('?','?','?','?','?','?') LIMIT 1;"; 
    $query_prepare = $this->prep_q($query,array($item,$invoice_id,$description,$rate,$qty,$price)); 
} 

$this->setquery($query_prepare); 
} 
+3

向我們展示完整代碼 – mdziekon 2012-07-19 06:07:41

+1

爲數據庫列設置的數據類型是什麼?執行'desc invoice_items'SQL查詢。 – Stegrex 2012-07-19 06:13:01

回答

0

此外,你應該創建一個可行的數組,每行都有自己的名字,描述,比率,itemid。

所以不是:

Array 
(
[item] => Array 
    (
     [0] => item listing 1 
     [1] => item listing 2 
    ) 

[description] => Array 
    (
     [0] => item testing description 
     [1] => item testing description 
    ) 

[rate] => Array 
    (
     [0] => 1.00 
     [1] => 2.00 
    ) 

[itemid] => Array 
    (
     [0] => 1 
     [1] => 2 
    ) 
) 

你的陣列應該像這樣:

Array 
(
[0] => Array 
(
     [item] => item listing 1 
     [description] => item testing description 
     [rate] => 1.00 
     [itemid] => 1 
) 
[1] => Array 
(
     [item] => item listing 2 
     [description] => item testing description 
     [rate] => 2.00 
     [itemid] => 2 
) 

然後,你可以簡單地使用的foreach,和PDO或mysqli的

$sql['update'] = "UPDATE `invoice_items` 
        SET `item` = :item, `description` = :description, `rate` = :rate 
        WHERE `itemid` = :itemid"; 

$sql['insert'] = "INSERT INTO `invoice_items` (itemid,item,description,rate) 
        VALUES (:itemid, :item, :description,:rate)"; 

foreach ($array as $row){ 
    if($row['itemid'] >= 1){ 
     $stmt = $db->prepare($sql['update']); 
    }else{ 
     $stmt = $db->prepare($sql['insert']); 
    } 
    $stmt->execute($row); 
} 
+0

謝謝你。我很抱歉我對array()的理解不夠,但是你會如何建議我'創建一個可用的數組'?再次感謝你的回覆。 – neoszion 2012-07-19 07:22:20

+0

任何想法?我爲快速碰撞道歉! – neoszion 2012-07-19 10:53:51

+0

我設法得到關於陣列的幫助。但我仍然提交插入的其他項目:我會更新我的帖子。 – neoszion 2012-07-19 17:44:35