Mailinglisten-Archive |
Armin Steiner wrote:
Ich wuerde sagen, das du die Tabelle auch beim select einen write-lock
spendieren musst. Zu dem Zeitpunkt waere es naemlich moeglich, das ein anderer
direkt nach dem select einen insert fahert....
deine Transaktion umfasst folgendes:
1. lock write
2. select
3. evtl insert
4. unlock
du machst locks um jeden sql-query, das bringt wohl nix...
--Andi
>
> Ok, erstmal danke für eure Tips,
>
> aber fragen bleiben trotzdem:
> Ich versuche nun, die Datenbank beim Vorgang mittels LOCK
> vor gleichzeitigen Einträgen zu schützen (Weil, wir erinnern uns,
> wenn der gleichzeitige Zugriff nicht verhindert wird, sind
> doppelte Einträge möglich, und das kann die Datenbank dann
> in tiefe Sinnkrisen stürzen :-)). Das sieht dann so bei mir aus:
>
> Daten für die Überprüfungsroutine zu holen:
> -------------- cut ---------------------------------
> $lock = "LOCK TABLES user READ offer READ";
> $unlock = "UNLOCK TABLES";
> $sql = "SELECT name,vorname,email,login FROM user";
>
> db = _(at)_mysql_connect($host, $user) OR DIE("There appeared an error(1),
> please try again.");
> _(at)_mysql_select_db($database,$db) OR DIE ("There appeared an error(2),
> please try again.");
> $getlock = mysql_query($lock,$db);
> $result = mysql_query($sql,$db);
> $getunlock = mysql_query($unlock,$db);
> ----------------------------------------------------
>
> bzw.
>
> Für den Fall, dass Überprüfung erfolgreich war: Eintrag:
> -------------- cut ---------------------------------
> $lock = "LOCK TABLES user WRITE offer READ";
> $unlock = "UNLOCK TABLES";
> $sql = INSERT INTO user VALUES
> ('$name','$vorname','$strasse','$strnr','$ort','$plz','$telnrvor','$teln
> rnach','$faxnrvor'
> ,'$faxnrnach','$email','$passwd','$land','$login','$anrede','$bbue')";
>
> db = _(at)_mysql_connect($host, $user) OR DIE("There appeared an error(1),
> please try again.");
> _(at)_mysql_select_db($database,$db) OR DIE ("There appeared an error(2),
> please try again.");
> $getlock = mysql_query($lock,$db);
> $result = mysql_query($sql,$db);
> $getunlock = mysql_query($unlock,$db);
> ----------------------------------------------------
>
> schade nur, das es nicht funktioniert. Doppelte Einträge sind immer
> noch möglich .... grmble.
>
> Wo liegt der Fehler ? Oder wird der LOCK auf Windows nicht
> unterstützt ?
>
> Was geben $getlock und $getunlock eigentlich zurück ? (bzw.
> was sollten sie bei Erfolg/Misserfolg zurückgeben?). Ich habe das
> mal mit "echo $getlock" und "echo $getunlock" geprüft, $getlock gab
> nichts zurück, $getunlock gab 1 zurück ? Könnte mir das helfen ?
>
> Hoffe war nicht zu lang das posting ... :-)
>
> mit bestem Gruß
>
> -Armin
> _____________________________________________________________
> Du bist PHP-Einsteiger ? Installationsguides, BestofGML, Tipps, Links
> MySQL-Tutorial, WhoIsWho, Spotlight *NEU* dt. Manual *NEU* ---
> DyNAMIc WEb PAGes at http://www.dynamic-webpages.de
>
> ---
> *** Abmelden von dieser Mailingliste funktioniert per E-Mail
> *** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe
--
Andreas Vierengel
System and Network
Professional / Consultant
GEDIF GmbH
---
*** Abmelden von dieser Mailingliste funktioniert per E-Mail
*** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe
php::bar PHP Wiki - Listenarchive