php und Multithreading

cool

nochmal zu php und mysql

nehmen wir mal ein ein script geht diese schleife durch:
die daten stammen aus dem table x:
PHP:
	$result = mysql_query($querry) OR die(mysql_error());

while($row = mysql_fetch_assoc($result)) {
//ganz viele zeitaufwendige operationen
}

währenddessen will ein anderes script einen write lock auf table x
setzten.

wartet dann dieses script bis die schleife durchgegangen wurde?
oder macht es diesen write lock sofort.

eigentlich müsste es den write lock sofort machen weil die sql abfrage bereits durchgeführt wurde .

Allerdings habe ich mal gelesen das "$result" nur eine referenz ist oder so.
dann würde ja der lock vieleicht noch warten müssen(irgendwie keine ahnung was ich da wieder rede aber ich will nur sichergehen).
 
dein result müsste false oder NULL oder so enthalten, die While-Schleife müsste sofort abgebrochen werden und nicht einmal durchlaufen werden.
 
Also das ist ganz einfach erklärt:
Mit der Referenz hast du vollkommen Recht, MySQL liest alle Daten und speichert sie zwischen, über die PHP-Funktionen holst du nun die Ergebniszeilen aus dem Zwischenspeicher, da der write-Lock zeitlich später kam, als deine Select-Abfrage hast du die Select-Abfrage in deinem PHP ganz normal, alle weiteren Abfragen auf die gelockten Tabellen werden aber so lange warten müssen, bis dein lock entfernt wurde, php "hängt" dann einfach so lange in der mysql_query funktion, bis es den query ausführen konnte.

Radhad, dem ist leider nicht so, Erklärung findet sich oben ;)
 
Also läuft das ganze dann auf einen Timeout hinaus in der Zeile mysql_query()? Ich dachte ein Fehler würde dann auftreten, dass die Daten derzeit nicht zugänglich sind. habe aber auch nicht diesbezüglich ins Handbuch geschaut.
 
Nein, ein Timeout wird nicht entstehen, die Funktion mysql_query() wird einfach solange auf den Ergebnis-Zeiger von MySQL warten bis er kommt, oder die max_execution_time abgelaufen ist.
 
ja, allerdings erfordert es, dass der safe_mode aus ist, aber ich hatte noch nie wirklich ein script wo ich probleme mit der max_execution_time bekam.
beeinflussen kannst du es mit set_time_limit()
 

Neue Beiträge

Zurück