![]() |
AW: [PHP/MySQL] - commit klappt nicht
Zitat:
Bei READ gibt es die Moeglichkeit, so genannte "non-conflicting inserts" zu erlauben, write-Locks gelten aber immer fuer die ganze Tabelle. Da du hier aber eine relativ kurze und unkritische Critical Section hast, duerfte ein Table-Lock erst bei hoher Last auffallen. Du hast schliesslich keine Key-Updates, und wenn die Where-Bedingung von Update und Select als gesamter Key vorhanden sind, gibt es da wirklich keine Performance-Probleme. Greetz alcaeus |
AW: [PHP/MySQL] - commit klappt nicht
Hi,
Zitat:
Liebe Grüße, Frederic |
AW: [PHP/MySQL] - commit klappt nicht
Zitat:
Greetz alcaeus |
AW: [PHP/MySQL] - commit klappt nicht
Hi!
Gut, soweit ;) Jetzt sehe ich nur ein Problem: Die Doku sagt: Zitat:
Grüße, Frederic |
AW: [PHP/MySQL] - commit klappt nicht
Moin,
ganz kurz das Prozedere:
SQL-Code:
Ich bin mir grad nicht ganz sicher wie das Verhalten bei autocommit = 0 ist - eventuell musst du nach dem Update aber noch vor dem Select einen Commit machen bzw. auch vor dem Update noch eine Transaktion oeffnen. Ganz aussen rum ist der autocommit, dann dein Lock, anschliessend die Queries die du ausfuehren willst.
SET AUTOCOMMIT = 0;
LOCK TABLES course_registrations WRITE; UPDATE course_registrations...; SELECT active FROM course_registrations...; UNLOCK TABLES course_registrations; SET AUTOCOMMIT = 1; Beachte aber, dass du den Unlock direkt nach dem Select machst und noch bevor du die Daten verarbeitest, damit du die Tabelle nicht laenger als noetig benutzt. Beachte ausserdem dass du vor dem Unlock keine Tabelle benutzen kannst die nicht vorher gelockt wurde. Greetz alcaeus |
AW: [PHP/MySQL] - commit klappt nicht
Das Transaktionshandling bei MySQL erscheint mir etwas umständlich und suboptimal
|
AW: [PHP/MySQL] - commit klappt nicht
Zitat:
Greetz alcaeus |
AW: [PHP/MySQL] - commit klappt nicht
Sorry dass ich mir überhaupt erlaubt habe etwas zu schreiben.
|
AW: [PHP/MySQL] - commit klappt nicht
Hi!
Irgendwo muss ein Haken sein:
PHP-Quellcode:
Egal an welchen der beiden Stellen das UNLOCK steht - das Ergebnis ist immer ein ARGH...
$db -> autocommit(false);
$db -> query("LOCK TABLES course_registrations WRITE"); $sql = $db -> prepare('UPDATE course_registrations SET active = NOT active WHERE participantId=? AND courseId=?'); $sql -> bind_param('ii', $participantID, $courseID); $sql -> execute(); $sql2 = $db->prepare('SELECT active FROM course_registrations WHERE participantId=? AND courseId=?'); $sql2 -> bind_param('ii', $participantID, $courseID); $sql2 -> execute(); $db -> query("UNLOCK TABLES course_registrations"); $sql2 -> bind_result($active); $sql2 -> fetch(); if ($db -> commit()) { } else { echo $active; echo "ARGH"; } //$db -> query("UNLOCK TABLES course_registrations"); $db -> autocommit(true); Grüße, Frederic |
AW: [PHP/MySQL] - commit klappt nicht
Zitat:
Es ist nunmal einfach etwas "unlogisch", "kompliziert", "doof", "ungeschickt", was auch immer zu nennen. Wenn du die letzten paar PHP-Themen hier in der DP ansatzweise verfolgt hast weisst du auch was dabei rauskommt: irgendwer liest es und nimmts fuer bare Muenze. Es spricht nichts gegen eine Diskussion ueber das Thema - aber wenn dann bitte mit Argumenten. Zum Thema: 1. Den fetch() solltest du vor dem Unlock ausfuehren. 2. Die Logik hat nen kleinen Denkfehler: wenn autocommit = 0 musst du das Update-Statement mit nem Commit bestaetigen. Das musst du vor dem Select machen, ansonsten ist die Aenderung ja noch nicht in der DB. Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz