Jostain syystä en ole onnistunut lisäämään lukuisista yrityksistä huolimatta kahteen eri tauluun yhtä riviä, kun käyttäjä rekisteröityy sivustolle. Millä keinoin tämä olisi mahdollista? Ihan oppikirjan mukaan olen mennyt mutta jokin mättää.
$sql1="INSERT INTO Taulu1 (...) VALUES (...)"; $sql2="INSERT INTO Taulu2 (...) VALUES (...)"; if(!mysqli_query($connect, $sql1)) { die('Error: Ei voida lisätä tietokantaan.' . mysqli_error()); } if(!mysqli_query($connect, $sql2)) { die('Error: Ei voida lisätä tietokantaan.' . mysqli_error()); } echo "Lisätty onnistuneesti tietokantaan."; ?>
1. Avaa yhteys tietokantaan.
2. Kirjoita tauluun 1 haluamasi asiat
3. Kirjoita toiseen tauluun haluamasi asiat.
4. Sulje yhteys
Jos noista ei ole apua, niin kerro tarkemmin. Ehkäpä voisit jopa näyttää koodin, jolla ongelmasi esiintyy.
Moikka.
Tuossa yllä on nyt koodinpätkä ongelmasta.
Mitä virheilmoituksia saat? Oletko avannut yhteyden?
Virheilmoitukset tulee näkyviin tällä pätkällä, kun lisäät sen heti sivun alkuun
Kannataa varmaan luopua noista vanhentuneista funktioista. PDO on paljolti miellyttävämpi tapa hoitaa tietokanta-asiat. Tosiaan kerro vain ihan kaikki tieto mitä ruudulle tulostuu, kun ajat nuo kyselyt.
Moikka.
Sain virheilmoitukset näkyviin tuolla koodilla ja asian korjattua.
Kiitos vastanneille.
Teuro kirjoitti:
Kannataa varmaan luopua noista vanhentuneista funktioista.
Mysqli ei ole suinkaan vanhentunut.
Jos ensimmäinen kysely on myös riippuvainen toisen kyselyn onnistumisesta, on syytä käyttää transaktioita. Kaikki tai ei mitään.
<?php //PDO transactions esimerkki try { $db->beginTransaction(); $query = $db->prepare("INSERT INTO Taulu1 (x, y) VALUES (?, ?)"); $query->execute(array($value1, value2)); $query = $db->prepare("INSERT INTO Taulu2 (x, y) VALUES (?, ?)"); $query->execute(array($value3, value4));; $db->commit(); } catch(PDOException $e) { //Mitään ei lisätty mihinkään $db->rollBack(); print $e->getMessage(); }
Jos jokin kysely epäonnistuu, mitään muutoksia ei toteuteta.
Käyttämälläsi mysqli - kirjastolla:
<?php $mysqli = new mysqli("localhost", "username", "password", "test"); $mysqli->autocommit(FALSE); $mysqli->query("INSERT INTO Taulu1 (...) VALUES (...)"); $mysqli->query("INSERT INTO Taulu2 (...) VALUES (...))"); if (!$mysqli->commit()) { print("Virhe. Mitään ei lisätty mihinkään"); } $mysqli->close();
Vastaavasti proseduraalinen esimerkki:
<?php mysqli_autocommit($connect, FALSE); mysqli_query($connect, "INSERT INTO Taulu1 (...) VALUES (...)"); mysqli_query($connect, "INSERT INTO Taulu2 (...) VALUES (...)"); if (!mysqli_commit($connect)) { print("Virhe. Mitään ei lisätty mihinkään"); }
Esimerkit eivät ole testattuja. Tuolta ja tuolta löydät aiheeta lisätietoa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.