PHP:llä olen tekemässä erästä sovellusta ja nyt tuli sellainen ongelma vastaan eli:
Olen tekemässä transaktiota, jossa ensin tallennan tauluun1 tietueen ja sen jälkeen tauluun2 pitäisi tallentaa taulun1 id. Millä tavalla saisin fiksusti selville taulun1 id:n? ID:t on luotu auto_incrementillä... Käytän siis PDO:ta tietokantayhteyksiin.
Saat selville viimeksi lisätyn rivin id:n PDO-luokan metodilla lastInsertId.
Niinpä tietenkin ei vaan osunu silmään, kun selaisin php.netistä. Kiitos tästä!
Edit. Jostain syystä kun suoritin transaktion, niin rollBack-metodi ei kumonnut toiseen tauluun tehtyjä muutoksia, vaikka toisen kohdalla tapahtui virhe.
<?php try { $db->beginTransaction(); $sql = "INSERT INTO pages SET pname = ?"; $query = $db->prepare($sql); $query->execute(array($_POST['pname'])); $sql = "INSERT INTO contents (pid, eid, title, content) VALUES (?,?,?,?)"; $query = $db->prepare($sql); $query->execute(array($db->lastInsertId(), $_POST['eid'], $_POST['title'], $_POST['content'])); $db->commit(); } catch (Exception $e) { $db->rollBack(); echo "Virhe: " . $e->getMessage(); }
Huom. tässä koodissa ei ole enää virhettä tahallaan tekemääni virhettä.
Ovathan taulut InnoDB-tyyppisiä eivätkä MyISAM-tyyppisiä?
Eipähän ne tietenkään ole... Olis pitäny varmaa lukee kunnolla noi oppaat xD. Kiitos vastauksesta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.