phpbar.de logo

Mailinglisten-Archive

[php] mysql_insert_id() nicht bei mehreren Connections?

[php] mysql_insert_id() nicht bei mehreren Connections?

Matthias Jim Knopf jim_(at)_users.de
Mon, 14 Aug 2000 19:28:37 +0200 (MEST)


Hey-ho Egon Schmid (_(at)_work) wrote:
 
> > > > mysql_insert_id (int [link_identifier]);
> > >
> > > Das muss ein Handbuch vom letzten Jahrhundert sein.
> > 
> > das mag ja sein, aendert aber an meinem Problem nichts!

hab mir jetzt die aktuelle doku gezogen, doch da steht auch nix
tolles drin.
 
> > > Dieser Funktionsprototype sagt, dass der link_identifier optional ist.
> > > Wenn er angegeben wird, dann sollte er vom Typ her ein Integer sein.
> > 
> > meine globale Variable ist integer
> 
> Das ist nicht gut und könnte Probleme bereiten.

    Tut es aber nicht!  Du  musst  mir  nicht  erklaeren,  wie  man 
 ordentlich programmiert! Ich kenne alle meine  globalen  Variabeln 
 und glaub mir: Ich hab mir genau ueberlegt, welche  Variablen  ich 
 wirklich global haben will.

> > > Es funktioniert in mehreren Skripten wenn man das optionale Argument
> > > weglässt.
> > 
> >     Das ist eine  falsche  Aussage,  sonst  haette  ich  sicherlich
> >  meine Mail nicht geschrieben!
> 
> Die Aussage ist richtig. Kann es sein, dass Du die Funktion
> mysql_insert_id() falsch anwendest?

s.u.

> Das Problem, warum sich diese
> Funktion manchmal merkwürdig verhält ist in Paul DuBois, MySQL:
> Entwicklung, Implementierung und Referenz, Markt&Technik, auf den Seiten
> 816 - 818 beschrieben.

    ...und da steht was? Danke fuer den Tip,  aber  ich  werd'  mir 
 dafuer jetzt nicht ein Buch  kaufen,  wo  ich  seit  Jahren  keine 
 Buecher mehr kaufe!
 
> > > Probleme gibt es nur, wenn man einen Link_Identifier angibt.
> > 
> >     ob mit oder ohne Argument: Sobald das  andere  Script  auf  der
> >  gleichen Seite  AUCH  eine  MySQL-Verbindung  aufbaut,  klappt  in
> >  meinem Script kein einziges mysql_insert_id()  mehr!  Und  um  das
> >  nochmal zu betonen: Normalerweise  benutze  ich  keine  Parameter,
> >  aber es laueft auch nicht mit dem (correkten!) MySQL-Link besser!
> 
> mysql_insert_id() ist unmittelbar nach der Generierung eines
> AUTO_INCREMENT-Wertes abzufragen. Wenn man das irgendwo im Skript macht,
> dann gehts halt nicht oder ist dem Zufall überlassen.

    Auch diesen Fehler hab  ich  nicht  begangen,  und  bevor  noch 
 weiter im Trueben gefischt wird, hier der Auszug meines Scripts:



    // sql_query() ist der Kompatibilitaetsaufruf, der mysql_query()
    // mit vertauschten Parametern (!) aufruft.
    $res=sql_query ($SQL_CONNECTION,
          "insert into ".$USER_TABLE." ". 
          "(user_name, user_fullname, user_pwd, multilogin, user_flags, ".
          " user_email, expire_at) values (\"".
           addslashes($edit_name[0])."\", \"".addslashes($edit_fullname[0]).
          "\", \"".$edit_pwd[0]."\", \"".$edit_multi[0]."\", ".
           $flags.", \"".addslashes($edit_email[0]).
          "\", \"".$edit_expire[0]."\")");
    // Damit das GANZ klar nochmal gesagt wird: Die query oben
    // ist erfolgreich, falls ich beim Formatieren der Mail mit 
    // den quotes durcheinander kam: Sorry, aber folgende Zeile
    // liefert '0' :
    $new_id=sql_insert_id();
    // und auch hier ist sql_insert_id() ein direkter Verweis
    // auf mysql_insert_id()

    // Alle noch folgende Zeilen sind nur fuer's debuggen geschrieben:
    if ($new_id==0) {
      if (!($new_id=sql_insert_id($SQL_CONNECTION))) {
        if (!($new_id=sql_insert_id($res))) {
          // hier lande ich IMMER, wenn das Script des Kollegen
          // mit in dieser Seite drin ist:
          echo ("New ID: 0 in all stages: $new_id. \$res: $res<br>");
        }
        else {
          echo ("stage III Done<br>");
        }
      }
      else {
        echo ("stage II Done<br>");
      }
    }

    und der Vollstaendigkeit halber hier  auch  den  nicht  weniger 
 trivialen Script-Teil, der ganz zu  Anfang  der  Seite  include()d 
 wird, und durch seine Existens obige $new_id==0 ist:

 <?php
   $jura_host = "bla";
   $jura_db   = "schwaetz";
   $jura_user = "laber";
   $jura_pass = "suelz";
   $handler    = _(at)_mysql_connect("$jura_host","$jura_user","$jura_pass");
   _(at)_mysql_select_db ($jura_db, $handler);
 ?>

Diese Sendung wurde Ihnen praesentiert von Jim
PGP encrypted mails welcome! Key on any keyserver or ftp://users.de
---
 Unix´ view of sex:
 unzip ; touch ; finger; mount; gasp ; yes ; umount ; sleep






php::bar PHP Wiki   -   Listenarchive