Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL: Rivin lisääminen kahteen eri tauluun samaan aikaan

Sivun loppuun

Thalassa [08.12.2013 10:13:04]

#

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.";
?>

Teuro [08.12.2013 10:24:59]

#

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.

Thalassa [08.12.2013 10:32:00]

#

Moikka.

Tuossa yllä on nyt koodinpätkä ongelmasta.

Macro [08.12.2013 11:17:30]

#

Mitä virheilmoituksia saat? Oletko avannut yhteyden?

Virheilmoitukset tulee näkyviin tällä pätkällä, kun lisäät sen heti sivun alkuun

ini_set("display_errors", 1);
ini_set("error_reporting", E_ALL | E_STRICT);

Teuro [08.12.2013 11:45:35]

#

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.

Thalassa [08.12.2013 12:44:20]

#

Moikka.

Sain virheilmoitukset näkyviin tuolla koodilla ja asian korjattua.

Kiitos vastanneille.

The Alchemist [08.12.2013 16:37:46]

#

Teuro kirjoitti:

Kannataa varmaan luopua noista vanhentuneista funktioista.

Mysqli ei ole suinkaan vanhentunut.

qeijo [09.12.2013 09:01:46]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta