11. januar 2004 - 01:34Der er
37 kommentarer og 1 løsning
Problemer med LOCK og UNLOCK TABLES
Jeg har problemer med LOCK og UNLOCK TABLES når jeg bruger dem her:
LOCK TABLES tabelnavn WRITE gør noget... UNLOCK TABLES
er der ikke nogle andre som kan skrive til tabelnavn. Det er også godt nok, men hvis 2 køre samme php-script på en gang så er der kun en som for lov til at skrive, den anden får ikke skrævet til databasen bagefter :( og må sende en post igen :(
finden der ikke en anden måde man kan låse et php-script på ligesom i ASP Application.Lock og .Unlock
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Ja det var også derfor jeg godt kunne bruge noget i stil med ASP Application.Lock og .Unlock (den låser hele siden så der ikke er nogle der får adgang til siden før .Unlock er kørt)
Du kan prøve at lave en tabel af typen InnoDB, og derefter kontrollere om den også blev lavet som InnoDB. Hvis den gjorde, kan du bruge transactions, og det er meget smartere end at låse hele tabellen.
Ja nu er jeg ikke så god til det der SQL ting... jeg ville heller have 2 funktioner som kunne låse et scrip på samme måde som den jeg fusker med :D script_lock() script_unlock()
Jeg bryder mig heller om fil udgaven. Det ville være meget smartere kun at låse den række der bliver brugt istedet for hele tabellen. Som sandbox er inde på vha. MySQL. Hvis du vælger at bruge det med filen skal du være opmærksom på, hvis der bruges mere end fx de 10 minutter er du nødt til at bruge en ny touch() inden.
Nej, ikke hvis du bruger autoincrement. Så bliver de begge tilføjet. Jeg troede der var tale om en UPDATE!
Synes godt om
Slettet bruger
11. januar 2004 - 03:35#21
Hvis det er INSERT i tabellen, så har du lavet noget på en helt forkert måde, hvis 2 brugere kommer til at konflikte med hinanden. Der skal du bruge et autonummerfelt og mysql_insert_id()
Det er meget lettere at hjælpe, hvis vi ser koden.
Ellers kan vi bare sige: Sæt ID feltet til at blive autoincremented og brug mysql_insert_id() hvis dit php-script har brug for at kende ID på den netop oprettede post.
Det eneste problem med UPDATE kunne være at to brugere brugte tid på at opdatere den samme række samtidig. Den konflikter ikke, men den ene har selvfølgelig spildt sin tid.
Synes godt om
Slettet bruger
11. januar 2004 - 03:43#27
Nu begynder jeg at blive forvirret: Er der tale om UPDATE eller INSERT?
<?php $strComment = fix_right_newline($_POST["question_text"]); if ($_POST["username"] && $strComment && $_POST["qtitle"] && $_POST["qcat"]) { $conn = mysql_connect(HOST, USER, PASS); mysql_select_db(DB); $query = mysql_query("INSERT INTO ".QUESTION_TABLE."(Datenum, Title, Category, Username, Question) VALUES('".date_int()."','".$_POST["qtitle"]."','".$_POST["qcat"]."','".$_POST["username"]."','".$strComment."');"); $query = mysql_query("SELECT ID FROM ".QUESTION_TABLE." WHERE Category = '".$_POST["qcat"]."' ORDER BY ID DESC LIMIT 1;"); $row = mysql_fetch_array($query); $ret_id = $row["ID"]; mysql_close($conn); header("Location: $REDIRECT_URL?id=".$ret_id); } else { header("Location: $REDIRECT_URL"); } ?>
Synes godt om
Slettet bruger
11. januar 2004 - 03:46#29
Så laver du bare disse linier:
$query = mysql_query("SELECT ID FROM ".QUESTION_TABLE." WHERE Category = '".$_POST["qcat"]."' ORDER BY ID DESC LIMIT 1;"); $row = mysql_fetch_array($query); $ret_id = $row["ID"];
om til:
$ret_id=mysql_insert_id();
Synes godt om
Slettet bruger
11. januar 2004 - 03:47#30
Og MySQL sørger selv for, at der ikke er to, der får samme ID. Det lader nemlig til at du allerede har sat ID til at være et autonummerfelt.
Ja, det gør jo en forskel. Vi kunne have sparet meget tid, hvis du havde reageret på: 02:44:36.
Synes godt om
Slettet bruger
11. januar 2004 - 04:03#34
detox: Og tænk på al den låse-kode der så heller ikke er nødvendig.
sjh: Det er generelt en god ide at beskrive sit problem meget grundigt og præcist. Så er det nemlig meget lettere for os andre at give præcis den hjælp, der er brug for.
Dette gælder især, hvis man er ude i noget, hvor man er lidt usikker, for det kan jo være at man er kommet ud af et sidespor, som du var her.
Hvis du havde postet den kode i selve spørgsmålet den 22/12 kunne du have haft det løst allerede dengang. detox ville nok have kommet med samme svar, som jeg gav dig lige før i sit første indlæg i http://www.eksperten.dk/spm/442688
hvis der så er 2 som køre det samme script på en gang, så tager den en bruger af gangen (altså scriptet kan kun køres af en bruger afgangen så venter den bare til en bruger er færtig)
Synes godt om
Slettet bruger
11. januar 2004 - 04:41#38
Der kan man låse filen, der skal skrives til. PHP-funktionen dertil hedder flock()
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.