Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PDO error uutta riviä lisätessä

Sivun loppuun

mika132 [22.06.2011 17:13:44]

#

Eli sain ihan järjettömän errorin kun lisään riviä PDO:lla tietokantaan:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'' in /home/web00439/public_html/gameheaven/the_gangster/luodaan_tunnus.php:19 Stack trace: #0 /home/web00439/public_html/gameheaven/the_gangster/luodaan_tunnus.php(19): PDOStatement->execute(Array) #1 {main}
<?php
$rivi_lisaa = $connection->prepare("INSERT INTO the_gangster (Kayttaja, ID, Arvo, Rahaa, Kultaa, Pro, Voima, Nopeus, Terveys, Kestävyys, Taso, Kokemus, Parannus_pisteet, max_kokemus, Pilvea, Sijainti, Ryostaminen, max_reppu, Hyokkays, Puolustus, Pilvifarmin_taso, talli_max, max_terveys, Mieliala, Paa, Tarkkuus, Tekniikka) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$rivi_lisaa->execute(array($username, $tempid, "Uusi kasvo", 500, 20, 7, 1, 1, 100, 10, 1, 1, 2, 25, 1, "Suomi", 1, 1, 1, 1, 1, 1, 100, 100, 1, 1, 1));

Eli rivi 19 johon errori viittaa on tuo: execute(array(jnejne));

Mistähän tuo johtuu kun ei ole itselläni mitään käryä?

Chiman [22.06.2011 17:16:43]

#

Yrität tallentaa kantaan toisen rivin samalla PRIMARY KEY -arvolla (1). Ei ole sallittua.

Metabolix [22.06.2011 17:17:07]

#

Älä aseta ID:tä itse. Tee sarakkeesta AUTO_INCREMENT-sarake, jätä ID kokonaan pois kyselystä ja hae automaattisesti luotu ID lisäyksen jälkeen funktiolla $connection->lastInsertId().

mika132 [22.06.2011 17:27:11]

#

Mutta kun sivustooni rekisteröityy käyttäjä saa itselleen ID:n. Kun hän menee pelaaman tehdään hänelle pelin omaan tietokantaan omat tiedot. Eikös systeemit mene aika sekaisiksi jos joka pelissä on eri ID?

temu92 [22.06.2011 17:28:39]

#

Systeemi menee juuri sekaisin jos joka pelaajalla/pelissä on sama ID.

Metabolix [22.06.2011 17:35:34]

#

Mikä tuo $tempid sitten on, jos se ei ole käyttäjän ikioma, yksilöllinen ID? Mitään ongelmaa ei ole, jos käyttäjällä on oma ID ja jokainen käyttäjä on tuossa taulussa vain kerran.

mika132 [22.06.2011 17:35:42]

#

Ei.. tuntuuko minusta vain että selitän asiat vaikeasti. :D

Pelaaja Pertti rekisteröityy tehogamesiin. Hän on ensimmäinen ja sää ID 1.
Pelaaja Pena rekisteröityy toisena ja saa ID 2.

Sitten Pena menee pelaamaan peliä The Gangster ja systeemi havaitsee, että hänellä ei ole the gangsterissa vielä tietoja joten ne tehdään. Eli käyttäjä ohjataan luodaan_tunnus.php sivulle.

Tässä kohtaa tietokantaan tulee ensin perus tiedot eli:
Käyttäjänimi: Pena
ID: 2
sitten TheGangsterin jutut perään.

No jos teenkin sen niin, että Thegangsterinkin tietokannassa ID on auto increment niin tilannehan on se, että penan tunnus on ID:llä 2 mutta kun hän menee pelaamaan TheGangsteria ID onkin 1.. eli hänet kirjataan pihalle koska istunto tarkistukset luulevat hänen kaapanneen toisen tunnuksen.


EDIT:

<?php
$tempid = $_SESSION["id"];
$username = $_SESSION["username"];

siinä on $tempid. Se on istunnon tulos. Kun käyttäjä kirjautuu sisälle tarkistetaan käyttäjätunnus ja salasana. Sen jälkeen etsitään niihin sopiva tunnus tietokannasta ja sieltä ID ja lisätään istuntoon.

Grez [22.06.2011 17:37:58]

#

No tietenkään et tee thegangsteriin pelaajaId kenttää autoincrementiksi. Mutta jos määrität pelaajaId kentän Primary Keyksi, niin sitten pidät huolen siitä, että et myöskään lisää samaa käyttäjää sinne kahteen kertaan.

mika132 [22.06.2011 17:40:21]

#

Ja löysin vian. Kiitos. Löysin hieman pintaa syvemmältä väärän sivuohjauksen ja se yritti todellakin ajattaa kokoajan samaa henkilö samaan tietokantaan monta monta kertaa. :D

Kiitos. =)


Sivun alkuun

Vastaus

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

Tietoa sivustosta