aprepared deyimi ile bir sorguda birden çok tabloyu değiştirme

2 Cevap php

Ben MySQL ve PHP ile kullanıyorum şu hazırlanmış sorgu var. Kullanıcıların $ Subcat üzerinden geçti, belirli bir kategori eklenecek sağlamaktır.

$alterQuery = "UPDATE AUCTIONS SET subcat= ? WHERE article_no= ?";
   if ($altRecord = $con->prepare($alterQuery)) {
       $altRecord->bind_param("ss", $subcat, $pk);
       $altRecord->execute();
    $altRecord->close();
    echo "true";
    }

Ben yapmak istiyorum ne, aynı sorguda, kullanıcı adı zaten var olmadığını kontrol ettikten sonra, sadece kullanıcı adını ekleyerek KULLANICI tablosunda yeni bir kayıt eklemek olduğunu. Sadece dolar alterQuery değiştirmek mümkündür:

Ne bu ne yapmak için en iyi nedir?

Kullanıcı adı kontrol edin ve bu null == eğer, bir sonraki ekleme yapmak? Ben blok halinde aynı yürütülen iki farklı sorgu var olabilir?

edit: yanıt veritabanı şeması takmak Yorumlamak için

AUCTIONS    

    ARTICLE_NO  	varchar(20) primary key
    ARTICLE_NAME 	varchar(100)
    SUBTITLE 	varchar(20)
    CURRENT_BID 	decimal(5,2)
    START_PRICE 	decimal(5,2)
    BID_COUNT 	varchar(20)
    QUANT_TOTAL 	varchar(20)
    QUANT_SOLD 	varchar(20)
    ACCESSSTARTS 	varchar(30)
    ACCESSENDS 	varchar(20)
    ACCESSORIGIN_END 	varchar(20)
    USERNAME 	varchar(20) 	
    BEST_BIDDER_ID 	varchar(20) 	
    FINISHED 	tinyint(4) 	
    WATCH 	tinyint(4) 		
    BUYITNOW_PRICE 	decimal(5,2) 	
    PIC_URL 	varchar(120) 	
    PRIVATE_AUCTION 	tinyint(4)
    AUCTION_TYPE 	varchar(20) 	
    ACCESSINSERT_DATE 	varchar(20)
    ACCESSUPDATE_DATE 	varchar(20)
    CAT_DESC 	varchar(20) 	
    CAT_PATH 	varchar(20) 	
    ARTICLE_DESC 	text 	
    COUNTRYCODE 	varchar(20)
    LOCATION 	varchar(20)
    CONDITIONS 	varchar(20)
    REVISED 	tinyint(4) 
    PAYPAL_ACCEPT 	tinyint(4) 
    PRE_TERMINATED 	tinyint(4) 
    SHIPPING_TO 	varchar(20)
    FEE_INSERTION 	decimal(5,2)
    FEE_FINAL 	decimal(5,2)
    FEE_LISTING 	decimal(5,2)
    PIC_XXL 	tinyint(4) 
    PIC_DIASHOW 	tinyint(4) 
    PIC_COUNT 	varchar(20)
    ITEM_SITE_ID 	varchar(20)
    STARTS 	datetime 	
    ENDS 	datetime 	
    ORIGIN_END 	datetime
    SUBCAT 	varchar(20)

USERS
    username  	varchar(30) primary key
    firstname 	varchar(30)
    lastname 	varchar(30)
    flaggedauctions 	varchar(30)
    lastauction 	varchar(30) 	
    street1 	varchar(30) 	
    city1 	varchar(30) 	
    postcode1 	varchar(30)
    street2 	varchar(30)
    city2 	varchar(30) 	
    postcode2 	varchar(30)
    phone 	varchar(30) 	
    mobilephone 	varchar(30) 
    fax 	varchar(30) 	
    email 	varchar(30) 	
    website 	varchar(30) 
    bank 	varchar(30) 	
    banknumber 	varchar(30)
    accountnumber 	varchar(30)
    comments 	varchar(30)

2 Cevap

Bir saklı yordam oluşturmak için en iyi olacak:

DELIMITER $$
CREATE PROCEDURE prc_add_user_to_category(_subcat VARCHAR(20), _article_no VARCHAR(20), _username VARCHAR(30))
BEGIN
        UPDATE  AUCTIONS
        SET     subcat= _subcat
        WHERE   article_no= _article_no;
        INSERT
        INTO    users (username)
        VALUES  (_username)
        ON DUPLICATE KEY
        UPDATE
        username = username;
END
$$
DELIMITER ;

ve kod onu çağırır:

$alterQuery = "CALL prc_add_user_to_category(?, ?, ?)";
   if ($altRecord = $con->prepare($alterQuery)) {
       $altRecord->bind_param("ss", $subcat, $pk, $userid);
       $altRecord->execute();
    $altRecord->close();
    echo "true";
    }

Kontrol ve derlemek ve 5.2.0-falcon-alpha-community-nt-log üzerinde şemayla çalışma kanıtlamış

Neden bunu yapmak istersiniz? Bir işlem içinde sorguları kapsayan ya tam taahhüt veya geri alma olacaktır.

http://en.wikipedia.org/wiki/ACID#Atomicity