簡體   English   中英

同時插入和更新,或在SQL查詢中使用事務處理

[英]INSERT and Update at the same time or Use Transact in SQL Query

我有以下3個查詢:

$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. 我想將一個商品添加到帶有chara's id的包item_id列中
  2. 然后從購買的商品金額中扣除該charas gold (基於商店item_price )。
  3. 然后在shop桌子item_qty購買商品的item_qty減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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM