Mailinglisten-Archive |
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