php und Multithreading

jer1cho

Mitglied
also wenn ich ne sql Tabelle mit der spalten "user" und "geld" habe.

und eine funktion:

die abfragt ob der "user" "geld" besitzt und wenn er "geld" besitzt wird
das "geld" einem einem anderen "user" gegeben.

Dann kann es doch passieren das 2 Threads gleichzeitig abfragen ob er "geld" besitzt und
dann geben beide threads das geld weg obwohl das geld eigentlich nur einmal hätte weggegeben werden dürfen.

oder wie funktioniert das in php
 
Zuletzt bearbeitet:
es würde auch folgendermaßen gehen:
PHP:
$res=mysql_query("UPDATE `user` SET `geld`=`geld`-500 WHERE `user`='jer1cho' and `geld`>=500");
if(mysql_num_rows($res)==0){
  echo "User hat kein Geld abgezogen bekommen";
}
else{
  echo "User hat Geld abgezogen bekommen";
}
Dieser Code ist natürlich um ein Vielfaches effizienter als ein komplettes Table-Locking, erfordert aber auch mehr Programmierarbeit.
 
ich dachte es geht um UPDATEs und nicht um INSERTs
nein, eine bedingung geht direkt in einem Insert Statement nicht, du könntest dies jedoch mit einem Trigger lösen, weit besser wäre jedoch InnoDB mit Roleback
 
also ich habe mich entschlossen mit
Lock tables zu arbeiten.

Allerding weiß ich jetzt nicht wie das dann genau gesperrt wird.

Und zwar im zusammenhang mit php.
sollte nämlich ein client die verbindung trennen dann
wir ja automatisch geunlockt allerdings weiß ich nicht so genau was bei php als sql client benutzt wird.

Benutzt jeder aufruf nen eigenen mysql client? wie kann man da was einstellen.

wenn ich ehrlich bin weiß nich noch nichtmahls mehr selbst so genau von was ich da rede.
Deshalb wollt ich mal fragen ob jemand dazu nähere informationen zu

PHP und mysql mit gelockten tables hat.
 
Jede Mysql-Verbindung von PHP zu MySQL erzeugt eine neue Verbindung (omg, bescheurt ausgedrückt).
Das Lock Tables gillt nun für alle MySQL-Verbindungen, solltest du die Tabelle wieder unlocken können alle anderen User wieder zugreifen.
Also hat jede Ausführung eines PHP-Scripts eine eigene MySQL-Verbindung
 
ah ja genau das wollte ich wissen THX .



kann ich mir 100% sicher sein dass die verbindung zur datenbank wärend eines scripts nicht abgebrochen wird. Vorausgestzt natürlich das die datenbank nicht abstürzt oder so.
 

Neue Beiträge

Zurück