0

ここで最初の質問に答えてもらいました:リンク

私の拡張された質問は、行をデータベースに正常に更新できますが、アイテム ID = 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);
}
4

1 に答える 1

0

また、実行可能な配列を作成する必要があります。各行には、独自の名前、説明、レート、アイテム ID があります。

したがって、代わりに:

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);
}
于 2012-07-19T06:43:30.220 に答える