/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
en teoretisk mulighed!???
Fra : strix nebulosa


Dato : 29-11-01 13:33

Hej...

Jeg bruger følgende kombination mellem mySQL og PHP for at få
id_nummeret på den række jeg inserter:

<?
$query = mysql_query("INSERT INTO TURDATA (blah blah blah)");
$new_id = mysql_insert_id();
?>

Jeg vil blot høre, om der i realiteten er en chance/mulighed/risiko for,
at man får smidt en anden $new_id i hovedet end fra den record man
inserter, hvis 2 brugere eksekverer scriptet på 110% sikker samme tid!??

Hvis der er, er der så databasemæssige muligheder for at sikre sig i
mySQL!??

Jeg ved ikke om dette er mere PHP_relevant end database_relevant; fortæl
mig venligst hvis jeg er OT!

MVH Steen Brølling
--
strix nebulosa <strix@mail.dk>


 
 
camraz (29-11-2001)
Kommentar
Fra : camraz


Dato : 29-11-01 22:17


> Jeg vil blot høre, om der i realiteten er en chance/mulighed/risiko for,
> at man får smidt en anden $new_id i hovedet end fra den record man
> inserter, hvis 2 brugere eksekverer scriptet på 110% sikker samme tid!??

> Hvis der er, er der så databasemæssige muligheder for at sikre sig i
> mySQL!??

Hvis du bruger de almindelige tabeller (MyISAM eller ISAM), så kan du sikre
at dine forespørgsler udføres atomistisk (dvs. som én forespørgsel, uden
afbrydelser)
ved hjælp af kommandoen LOCK TABLES.

Se MySQL-manualen: http://www.mysql.com/doc/A/N/ANSI_diff_Transactions.html

Du kan også bruge InnoDB- eller BDB-tabeller som understøtter alle
ACID-egenskaberne
som mange i denne Nyhedsgruppe tilbeder. Men så mister du de tre ting som
virkelig betyder noget når vi taler om MySQL:

1. Hastighed,
2. Hastighed, og
3. Hastighed.



/Carsten.
tele0.com - Online Telekort og Erhvervsinformation




Troels Arvin (30-11-2001)
Kommentar
Fra : Troels Arvin


Dato : 30-11-01 07:24

On Thu, 29 Nov 2001 13:33:25 +0100, "strix nebulosa" <strix@mail.dk>
wrote:

> Hvis der er, er der så databasemæssige muligheder for at sikre sig i
> mySQL!??
Du kan benytte LOCKs (se manualen).

Ellers kan du bruge et databaseabstraktionslag til at emulere sekvenser.
PEAR's DB-abstraktionslag har en funktion, der hedder nextId(), som do
kræver, at din PHP har CREATE privilegium (således at tabeller kan
oprettes).

--
Greetings from Troels Arvin, Copenhagen, Denmark



Christian Schmidt (30-11-2001)
Kommentar
Fra : Christian Schmidt


Dato : 30-11-01 16:35

strix nebulosa wrote:
>
> Jeg bruger følgende kombination mellem mySQL og PHP for at få
> id_nummeret på den række jeg inserter:
>
> <?
> $query = mysql_query("INSERT INTO TURDATA (blah blah blah)");
> $new_id = mysql_insert_id();
> ?>
>
> Jeg vil blot høre, om der i realiteten er en chance/mulighed/risiko for,
> at man får smidt en anden $new_id i hovedet end fra den record man
> inserter, hvis 2 brugere eksekverer scriptet på 110% sikker samme tid!??

Nej.

mysql_insert_id() returnerer seneste id-nummer for den aktuelle
forbindelse. Ej heller med persistent connections (mysql_pconnect) går
det galt, idet en given forbindelse benyttes eksklusivt at ét script,
fra du åbner forbindelsen (med mysql_pconnect) til dit script er slut.
Det er således i dette tilfælde ikke nødvendigt at benytte LOCK som
anført andetsteds i tråden.

Ovenstående vil således altid give det ønskede resultat - også selvom
flere instanser udføres parallelt.

Derimod vil det gå galt, hvis du brugte noget i retning af "SELECT
MAX(id) FROM ...".


Christian

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste