Pereiti prie turinio

Kaip padaryt, vienu metu, 2 INSERT?


Rekomenduojami pranešimai

Sveiki,

realiai man reiktu 2 INSERT, kai uzpildzius laukus ir patvirtinus, butu iterpiamas i DB. Mano kodas, bet jis neveikia:

try {
       $sql = 'START TRANSACTION;
           INSERT INTO main SET vardas =:vardas, date=:date, metai =:metai, telefonas =:telefonas, 
           email =:email; 
           INSERT INTO adresas SET regadresas =:regadresas, gyvadresas =:gyvadresas, regmiestas=:regmiestas;
           COMMIT;
';
       $s = $pdo->prepare($sql);
       $s->bindValue(':vardas', $_POST['vardas']);
       $s->bindValue(':metai', $_POST['metai']);
       $s->bindValue(':telefonas', $_POST['telefonas']);
       $s->bindValue(':date', $_POST['date']);
       $s->bindValue('regadresas', $_POST['regAdresas']);
       $s->bindValue('gyvadresas', $_POST['gyvAdresas']);
       $s->bindValue('regmiestas', $_POST['regmiestas']);
       $s->bindValue('gyvmiestas', $_POST['gyvmiestas']);
       $s->execute();
       //Writes the photo to the server 
   } catch (PDOException $e) {
       $error = 'Klaida!' . var_dump($e->getMessage()) . var_dump($pdo->errorInfo());
       include 'error.html.php';
       exit();


ir kaip perkelti "adresas.id" i main "adresasid"?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nemanau kad mysql palaiko tokia galimybę

nemeluok, pasidomėk pirmiausiai.

 

pats turiu užsirašęs, nežinau kodėl, gal pačiam kažkada atrodė, kad prireiks :|

 

BEGIN
INSERT INTO users (username, password) 
 VALUES('test', 'test')
INSERT INTO profiles (userid, bio, homepage) 
 VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com');
COMMIT;

 

tik va pasidomėk apie tą LAST_INSERT_ID() nežinau ką jis reiškia

Redagavo gio
Nuoroda į pranešimą
Dalintis kituose puslapiuose

ar informatikos pamokose įbruktas niekalas verčia tikėti, kad papildoma viena užklausa padidins perduodamų baitų skaičių ir apkraus svetainę

Jei kalbam apie susijusius pakeitimus vienoje tranzakcijoje, tai čia kaip tik yra the right way – jei iškiltų klaida, ar kas, tai rollbackintųsi viskas kartu, o ne vienas liktų...

 

Autoriaus atveju – ar nepavyktų startuoti tranzakciją atskiroje užklausoje, tada du INSERT per atskiras, ir dar COMMIT? Efektas turėtų būti maždaug tas pats. Nes net nežinia, kaip su tuo bindinimu, kai yra kelios užklausos vienoje...

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jei kalbam apie susijusius pakeitimus vienoje tranzakcijoje, tai čia kaip tik yra the right way – jei iškiltų klaida, ar kas, tai rollbackintųsi viskas kartu, o ne vienas liktų...

 

Autoriaus atveju – ar nepavyktų startuoti tranzakciją atskiroje užklausoje, tada du INSERT per atskiras, ir dar COMMIT? Efektas turėtų būti maždaug tas pats. Nes net nežinia, kaip su tuo bindinimu, kai yra kelios užklausos vienoje...

 

Aciu, suveike :) Jei kam idomu, tai kodas atrodytu mazdaug taip:

$pdo->beginTransaction();
   try {
       $sql = 'INSERT INTO adresas SET regadresas=:regadresas, regmiestas=:regmiestas';
       $s = $pdo->prepare($sql);
       $s->bindValue(':regadresas', $_POST['regadresas']);
       $s->bindValue(':regmiestas', $_POST['regmiestas']);
       $s->execute();

       $lastInsertAdresasID = $pdo->lastInsertId();

       $sql = 'INSERT INTO main SET vardas =:vardas, date=:date, adresasid = :adresasid';
       $s = $pdo->prepare($sql);
       $s->bindValue(':vardas', $_POST['vardas']);
       $s->bindValue(':date', $_POST['date']);
       $s->bindValue(':adresasid', $lastInsertAdresasID);
       $s->execute();

       // commit transaction
       $pdo->commit();
   } catch (PDOException $e) {
       // roll back transaction
       $pdo->rollback();
       // log any errors to file
       $error = 'Klaida!' . var_dump($e->getMessage()) . var_dump($pdo->errorInfo());
       include 'error.html.php';
       exit();
   }

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 4 mėnesių...

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...