Hallo HendrikX, hallo Tom,
@Tom:
"Für den Fall, dass ein zweiter Aufruf von mysql_connect() mit den gleichen Argumenten erfolgt, wird keine neue Verbindung aufgebaut, sondern die Verbindungs-Kennung der schon bestehenden Verbindung zurückgeliefert."
»»
[was ja im Falle von zwei zeitgleich verarbeiteten Scripten bzw. zwei nahe beieinanderliegenden HTTP-Aufrufen des »» »» gleichen Scripts durchaus der Fall sein kann...]Ein PHP-Script betreibt kein automatisches Threading in dem Resource- und Connection-Handles vererbt werden könnten.
(...)
Hastu völlig recht.
Das Zitat bezieht sich natürlich nur auf mehrere Aufrufe von mysql_connect innerhalb _eines_ verarbeiteten Scripts. Wenn dasselbe Script von _mehreren_ PHP-Interpreter-Instanzen _zeitgleich_ verarbeitet wird - z.B. weil es von verschiedenen Clients unmittelbar nacheinander per HTTP abgerufen wird - dann wird natürlich pro Interpreter-Instanz jeweils eine neue Verbindung hergestellt. Habe das mal mit folgendem Script getestet (W2K/Apache 2.0.52/PHP 5.0.2):
<?php // test.php
$CNX = mysql_connect('localhost', '[user]', '[pass]');
mysql_select_db('[dbname]', $CNX);
echo "Verbindungs-Kennung: $CNX <br />";
mysql_query("INSERT INTO [tabelle mit auto-inkrement-Spalte] SET [feld] = '[wert]', $CNX");
if (isset($_GET['wait']))
{
echo 'Verarbeitung dauert länger...<br />';
sleep(15);
}
echo 'LAST_INSERT_ID: ', mysql_insert_id($CNX);
?>
Beim Aufruf über 'test.php?wait=1' gibt mysql_insert_id($CNX) immer die jeweils richtige ID der letzten Einfügung zurück, auch wenn ich während der Sleep-Pause in einem anderen Browser-Tab mehrfach 'test.php' [ohne $_GET-Parameter] aufrufe.
- Aufruf 'test.php?wait=1'
...
-
Aufruf 'test.php' [ohne $_GET-Parameter, in einem anderen Browser-Tab]
Ausgabe :
Verbindungs-Kennung: Resource id #1
LAST_INSERT_ID: 1 -
Wiederholter Aufruf 'test.php'
Ausgabe :
Verbindungs-Kennung: Resource id #1
LAST_INSERT_ID: 2 -
Wiederholter Aufruf 'test.php'
Ausgabe :
Verbindungs-Kennung: Resource id #1
LAST_INSERT_ID: 3
...
- Ausgabe von 'test.php?wait=1':
Verbindungs-Kennung: Resource id #1
Verarbeitung dauert länger...
LAST_INSERT_ID: 0
[PHPs 'Resource id' ist nur eine Script-interne Verbindungs-Kennung.]
Die Verbindung, die für 'test.php?wait=1' aufgebaut wurde, bleibt für die Verarbeitungszeit dieses Scripts ausschließlich diesem Script bzw. der entsprechenden verarbeitenden Interpreter-Instanz vorbehalten.
@HendrikX:
Also ist hier wohl doch kein 'hartes Brot' zu befürchten (sondern - zumindest für mich - nur dieser zusätzliche 'Kenntnis-Krümel' entstanden; Ihr beide habt das ja vielleicht eh scho gwusst. ;-)
Grüße,
Sancho