phpbar.de logo

Mailinglisten-Archive

[php] mysql_insert_id() nicht bei mehreren Connections?

[php] mysql_insert_id() nicht bei mehreren Connections?

Egon Schmid (_(at)_work) eschmid_(at)_php.net
Mon, 14 Aug 2000 19:52:00 +0200


Matthias Jim Knopf wrote:

> > 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 was ist, wenn die Query nicht funktioniert hat? Paul DuBois schreibt
dazu:

Gibt den von der zuletzt auf der gegebenen Verbindung ausgeführte
Anfrage generierten AUTOINCREMENT-Wert zurück. Wurde während der
Lebensdauer der Verbindung kein solcher Wert generiert, wird Null
zurückgegeben.

Du solltest eine Fehlerüberprüfung bei $res = sql_query (...) or die
("Hat nicht funktioniert"); reinbauen.

>    $handler    = _(at)_mysql_connect("$jura_host","$jura_user","$jura_pass");
>    _(at)_mysql_select_db ($jura_db, $handler);

Das _(at)_-Zeichen bitte beim Debuggen entfernen.

-Egon

-- 
SIX Offene Systeme GmbH · Stuttgart  -  Berlin  -  New York
Sielminger Straße 63   ·    D-70771 Leinfelden-Echterdingen
Fon +49 711 9909164 · Fax +49 711 9909199 http://www.six.de


php::bar PHP Wiki   -   Listenarchive