phpbar.de logo

Mailinglisten-Archive

[php] mysql_insert_id() nicht bei mehreren Connections?

[php] mysql_insert_id() nicht bei mehreren Connections?

Robert Hoffmann robert.hoffmann_(at)_isp.lu
Mon, 14 Aug 2000 21:45:28 +0200


At 21:25 2000-08-14 +0200, you wrote:
>On Mon, 14 Aug 2000, Robert Hoffmann wrote:
>
> > >    eigentlich schon, aber wie gesagt:  Sie  IST  erfolgreich.  Wie
> > >  man  vielleicht  erkennen  kann,  wird  hiermit  ein  User-Account
> > >  angelegt, und dieser  Account  ist  nachher  auch  vorhanden,  nur
> > >  weiss ich halt nicht seine ID !
> >
> > Einfach mal reingefragt : Warum möchtest du die ID wissen? Wenns nur für
> > interne DB-Zwecke ist, kannst du das Ganze Problem auch umgehen...
>
>     Nein, ich kann es  nicht  wirklich  umgehen,  abgesehen  davon,
>  dass ich das auch nicht ganz einsehen wuerde... Ich brauche  diese
>  Funktion an vielen Stellen in meinem Script, und wenn ich auf  sie
>  verzichten  wollte,  koennte   ich   direkt   auf   AUTO_INCREMENT
>  verzichten, das waer auch nicht Sinn der Sache! Die ID  von  einer
>  Tabelle muss ich uebrigens  in  einer  anderen  Tabelle  eintragen
>  (als Referenz darauf), und so kann ich auf  diese  Funktion  nicht
>  verzichten.
>     Aeh, aber  da  ich  mich  jetzt  an  jeden  Strohhalm  klammere
>  trotzdem die Frage: Was meinst Du mit Umgehen? Ich sehe jetzt  nur
>  eine Moeglichkeit: Ich frage die Datenbank selber  nach  den  IDs,
>  nehme die hoechste Zahl und addiere eins, und  schon  "glaube  ich
>  zu wissen", was MySQL als naechste ID verwenden wird... bei  Multi
>  User Systemen ist das aber schon hart an der Grenze, oder  an  was
>  dachtest Du?

Nun ja, ich hatte auch mal das Problem mit dem Autoincrement (jedoch unter 
Sybase, das spielt aber hier keine Rolle).
Du könntest hingehen und deine IDs selbst verwalten. Dazu schaltest du 
autoincrement aus und dann:

Du erstellst eine Zusatztabelle die nichts mit den restlichen zu tun hat. 
Nennen wir sie mal "internaldata". In dieser Tabelle
erstellst du ein Feld "internal_lastid" oder so ähnlich (ist ja egal wie's 
heisst).Da schreibst du zum Beispiel 0 rein als Anfangswert.
Nun musst du nur vor dem Anlegen des Users ein kleines Query abfeuern (die 
Tabelle ist sehr sehr klein, und das Query auch, daher
vernachlässigbarer rechenaufwand) :

Select internal_lastid
from internaldata;

Den inhalt setzt du in eine Variable ($id). Dann machst du ein $id++; und 
schon hast du deine Id mit der du den User anlegen kannst oder
was auch immer du tun willst. diese Id schreibst du anschliessend zurück in 
die Tabelle internaldata. Ausserdem kannst du diese Id in alle Tabellen 
reinschreiben die sich aufeinander beziehen...

Mit autoincrement hatte ich schon mal Probleme dass ich Tests mit Tabelle1 
machte und dann für diese Tabelle der Autoincrement-Wert bei x stand und für
Tabelle2 auf x-y somit war die Sch...am dampfen...

Mit der obigen Lösung hast du übrigens eine Tabelle in der du alle internen 
Daten schon verwalten kannst, quasi eine ini-datei in der DB.






--
Hoffmann Robert aus Luxemburg
gruesst die PHP-Gemeinde...
--



php::bar PHP Wiki   -   Listenarchive