2013-05-02 130 views
2

我有這3個疑問:INSERT和UPDATE在同一時間或使用Transact SQL查詢

$sql1 = "INSERT INTO bag(bag_id, chara_id, item_id, item_qty)VALUES(NULL,:id,:item_id,'1')"; 
$sql2 = "UPDATE chara SET chara_gold = chara_gold - :gold WHERE chara_id = :id"; 
$sql3 = "UPDATE shop SET item_qty = :qty WHERE item_id = :item_id"; 

,並有這3個表:

  1. 甜心

    +----------+------------+----------------+-------------+------------+----------+----------+-----------+-----------+ 
    | chara_id | chara_name | chara_class_id | chara_level | chara_gold | chara_hp | chara_mp | chara_atk | chara_def | 
    +----------+------------+----------------+-------------+------------+----------+----------+-----------+-----------+ 
    |  1 | LawrenceX |    1 |   1 |  1000 |  1000 |  1000 |   7 |   3 | 
    |  3 | Viscocent |    2 |   1 |  1000 |  900 |  1100 |   5 |   5 | 
    |  4 | Piatos  |    1 |   1 |  1000 |  1000 |  1000 |   7 |   3 | 
    |  5 | Hello  |    1 |   1 |  1000 |  1000 |  1000 |   2 |   8 | 
    |  6 | Sample  |    3 |   1 |  1000 |  1100 |  900 |   9 |   1 | 
    |  8 | Sampuro |    2 |   1 |  1000 |  1500 |  100 |   5 |   5 | 
    |  12 | fail  |    2 |   1 |  1000 |  900 |  100 |   5 |   5 | 
    +----------+------------+----------------+-------------+------------+----------+----------+-----------+-----------+ 
    
  2. +---------+-----------------+------------+ 
    | item_id | item_name  | item_price | 
    +---------+-----------------+------------+ 
    |  0 | Halberd   |  400 | 
    |  1 | Axe    |  200 | 
    |  2 | Wooden Sword |  225 | 
    |  3 | Dagger   |   55 | 
    |  4 | Bow    |  120 | 
    |  5 | Helmet   |  155 | 
    |  6 | Tunic   |   50 | 
    |  7 | Armour   |  150 | 
    |  8 | Necklace  |  199 | 
    |  9 | Studded Leather |  240 | 
    +---------+-----------------+------------+ 
    
  3. +---------+---------+------------+----------+ 
    | shop_id | item_id | item_price | item_qty | 
    +---------+---------+------------+----------+ 
    |  1 |  1 |  200 |  99 | 
    |  2 |  2 |  225 |  99 | 
    |  3 |  3 |   55 |  99 | 
    |  4 |  4 |  120 |  99 | 
    |  5 |  5 |  155 |  99 | 
    |  6 |  6 |   50 |  99 | 
    |  7 |  7 |  150 |  99 | 
    |  8 |  8 |  199 |  99 | 
    +---------+---------+------------+----------+ 
    

場景:

  1. 我想將項目添加到包item_id列瓦特/ chara's id
  2. 然後扣除那charas gold所購物品的金額(基於店鋪item_price)。
  3. 然後在shop表中扣除購買物品的item_qty加1。

它可以在1個查詢中完成。 我也想使用交易。

回答

1

您無法在一個查詢中更新多個表。但是,您可以使用事務,使其在發生一次:

$db = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); 
$db->exec("SET CHARACTER SET utf8");  // Sets encoding UTF-8 

try { 
    $db->beginTransaction(); 

    $q1 = $db->prepare("INSERT INTO bag(bag_id, chara_id, item_id, item_qty)VALUES(NULL,:id,:item_id,'1')"); 
    $q1->bindValue(':id', $yourId); 
    $q1->bindValue(':item_id', $yourItemId); 
    $q1->execute(); 

    $q2 = $db->prepare("UPDATE chara SET chara_gold = chara_gold - :gold WHERE chara_id = :id"); 
    $q2->bindValue(':gold', $yourItemPrice); 
    $q2->bindValue(':id', $yourCharaId); 
    $q2->execute(); 

    $q3 = $db->prepare("UPDATE shop SET item_qty = :qty WHERE item_id = :item_id"); 
    $q3->bindValue(':qty', $yourQty); 
    $q3->bindValue(':item_id', $yourItemId); 
    $q3->execute(); 

    $db->commit(); 
} catch (Exception $e) { 
    $db->rollback(); 
} 
+0

我會嘗試這個明天:') – Viscocent 2013-05-02 13:29:24

+0

我在哪裏可以綁定變量在我的查詢? – Viscocent 2013-05-03 01:32:37

+0

@Viscocent看看最新的答案。 – likeitlikeit 2013-05-03 14:18:41

相關問題