php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.06.2005, 12:35  
Gast
 
Beiträge: n/a
Standard [Erledigt] Transaktionen mit Apache+PHP+MySQL

Hallo!

Ich benutze Apache 2.0 + PHP 5 + MySQL 5.0 und die Funktionen von mysqli.

Mein Problem: Ich möchte Transaktionen über den Webserver verwenden. Wenn ich über den Browser Transaktionen starte, bleiben die Tabellen aber nicht gesperrt bis ein "COMMIT" kommt, sondern werden gleich ausgeführt (AUTOCOMMIT ist ausgeschalten).
Transaktionen die ich über MySQL- Control Center machen funktionieren wie gewünscht.

Frage: Kann die Konfiguration von Apache oder PHP der Grund sein?
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.06.2005, 07:56  
Gast
 
Beiträge: n/a
Standard

Also ich hab mal eine vorläufige Lösung gefunden für alle dies interessiert:

wenn ich die Bibliothek mysql statt mysqli verwende, dann funktionieren Transaktionen über eine persistente Datenbankverbindung mit mysql_pconnect().

Lt. Dokumentation ist eigentlich die erweiterte Bibilothek mysqli für Funktionen von InnoDB-Tabellen besser geeignet, ich kann damit allerdings trotzdem keine Transaktionen durchführen...

Zur Erklärung: ich suche keine Transaktionen während der Abarbeitung eines PHP-Scripts sondern zwischen zwei gesonderten Aufrufen.

zB:
Laden eines Datensatzes in ein Formular zur Bearbeitung (Start einer Transaktion)
Ändern der Daten
Abschicken der Daten (UPDATE und COMMIT)

kennt wer noch einen anderen Weg als pconnect? Ich hab meine Scripts jetzt schon vollständig auf mysqli umgebaut und möchte das nicht nochmals tun, außerdem bin ich mir noch nicht sicher wie ich die gestartete Transaktion von pconnect am MySQL-Server sinnvoll beenden kann.
  Mit Zitat antworten
Alt 15.06.2005, 14:53  
Erfahrener Benutzer
 
Registriert seit: 10.09.2004
Beiträge: 339
mkl0815
Standard

ich denke nicht, das es ohne pconnect funktionieren wird. bei einem pconnect behält das php-modul die db-verbindung auch zwischen den scriptaufrufen und verwendet die spezifische verbindung wieder, wenn ein erneutes pconnect mit den gleichen verbindungsdaten gemacht wird. verwendest du connect, wird bei jedem scriptaufruf eine neue verbindung aufgebaut und bei scriptende wieder abgebaut. ein verbindungsabbau ohne commit wird vom dbms aber als "rollback" interpretiert.


allerdings kannst du bei parallelen zugriffen von mehreren (web)clients probleme mit dem pconnect bekommen, da sich alle scripte die gleich verbindung teilen und somit auch alle in der gleichen transaktion laufen. wenn eines der scripte ein commit macht, trifft das die gesamte transaktion.

mario.
__________________
Problems with Windows : REBOOT
Problems with Linux : BE ROOT
mkl0815 ist offline   Mit Zitat antworten
Alt 15.06.2005, 14:56  
Erfahrener Benutzer
 
Registriert seit: 10.09.2004
Beiträge: 339
mkl0815
Standard

Zitat:
Zitat von Mr.F
Zur Erklärung: ich suche keine Transaktionen während der Abarbeitung eines PHP-Scripts sondern zwischen zwei gesonderten Aufrufen.

zB:
Laden eines Datensatzes in ein Formular zur Bearbeitung (Start einer Transaktion)
Ändern der Daten
Abschicken der Daten (UPDATE und COMMIT)
wie bereits in vorherigen post beschrieben, macht dieser ansatz probleme bei parallelen zugriffen von mehreren clients.

warum muss denn nach dem laden der daten aus der db bereits die transaktion gestartet werden? es reicht doch nur die "schreibenden" zugriffe, also beim wiedereintragen der daten in die db, in einer transaktion zu kapseln.

mario.
__________________
Problems with Windows : REBOOT
Problems with Linux : BE ROOT
mkl0815 ist offline   Mit Zitat antworten
Alt 15.06.2005, 16:05  
Gast
 
Beiträge: n/a
Standard

Finde ich lesenwert:
http://de2.php.net/manual/en/functio...l-pconnect.php
Zitat:
markunderscoreconnollyatacmdotorg
27-Oct-2004 07:59
...
Reading the description of http://www.php.net/manual/en/feature...onnections.php maintaining transaction context would be at best a coincidence.
...
If mysql_pconnect does not coordinate well with the transaction component of the database engine to always end a transaction at the end of processing a request, then mysql_pconnect should never be used where begin transaction is used.
Wenn Du per-user Transaktionen über mehr als einen request brauchst, schau mal, ob Du die Daten sinnvoll in sessions aufheben kannst und die DB-Transaktion erst mit der Verarbeitung des letzten requests erstellst ...und dort auch beendest.
Ganz so einfach ist es meistens nicht, aber etwas Gehirnschmalz wert
  Mit Zitat antworten
Alt 24.06.2005, 09:08  
Gast
 
Beiträge: n/a
Standard

Nach dem was ich darüber alles gelesen habe, sollte man eigentlich nie pconnect() verwenden. Der Perfomancevorteil ist nicht sehr groß zu einem Standard connect() (das bei gleichen Verbindungsparametern von zwei Aufrufen ja auch keine völlig neue Verbindung aufbaut - das geschieht erst, wenn man das connect() mit einem weiteren Parameter aufruft).

Vielleicht ist das Problem das autocommit. schalte es vor dem START TRANSACTION doch mal mit 'SET AUTOCOMMIT=0' aus.

Vielleicht gehts dann so.
  Mit Zitat antworten
Alt 10.08.2005, 08:04  
Gast
 
Beiträge: n/a
Standard Transaktionen für mehrere User

Transaktionen haben ja 2 Vorteile. Erstens ist eine vollständige Speicherung eines bearbeiteten Datensatzes gesichert, nicht nur eines Teils (zB bei mehreren SQL-Statements hintereinander), zweitens funktioniert das gleichzeitige Arbeiten von mehreren Usern an einer Tabelle besser, weil wenn einer an einem Datensatz zu arbeiten beginnt, kann kein anderer daran arbeiten, bzw. er sieht gleich das an dem Datensatz geändert wird, und die Änderungen werden gespeichert.

Es kann immer nur eine Änderung geben, dann kommt die nächste. Ohne Transaktion läd sich der erste User den Datensatz, wenn ein anderer inzwischen eine Änderung macht, hat der erste nicht die aktuellen Daten, und wenn er seine Änderung abschickt, wird die Änderung vom 2.User einfach überschrieben. Weder der 1.User noch der 2. wissen danach was sie geändert haben und ob ihr Änderung auch angekommen ist.

Bei Transaktionen startet der 1.User seine Bearbeitung, der 2.User sieht, dass der Datensatz bearbeitet wird und kann nichts ändern. Wenn der 1.User fertig ist, sieht der 2.User die aktuellen Daten und kann immer noch entscheiden ob er was ändern muß oder nicht.

Das ist wie mit Excel. Da kann man auch gleichzeitig an einer Arbeitsmappe arbeiten, aber wenn man speichert überschreibt man die Änderungen des 2.Users ohne zu wissen, was der geändert hat.

Transaktionen ermöglichen ein korrdiniertes Zusammenarbeiten, ohne Transaktion wirds sehr chaotisch...
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MySQL in PHP integrieren (Windows 2003 Server ohne Apache) Plague Server, Hosting und Workstations 3 30.08.2007 21:56
Apache mit Konfiguration in MySQL dsmcg Server, Hosting und Workstations 6 05.09.2006 15:57
MySQL und PHPMyAdmin auf APACHE Webdesigner Datenbanken 12 24.03.2006 21:13
[Erledigt] Zu blöd um MySQL in PHP einzurichten? Apache Server PHP Tipps 2006 18 30.01.2006 23:39
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
Apache Server 2 mit PHP 5 und MySQL aufgesetzt ... und nun? PHP Tipps 2005-2 6 22.07.2005 15:51
[Erledigt] mysql + apache auf eigenem rechner Datenbanken 2 25.05.2005 12:12
Apache Logfile nach Mysql Schiedsrichter Beitragsarchiv 4 06.05.2005 20:17
MySQl Untestützung unter Apache 2 - Gelöst suter Server, Hosting und Workstations 5 07.11.2004 13:13
Apache 2.0.52 php + mysql bring fehler bei mysql.dll Server, Hosting und Workstations 0 04.11.2004 11:37
[Erledigt] Webserver (Apache?) auf CD brennen? (mit php umd mysql) ?? PHP-Fortgeschrittene 6 20.10.2004 02:31
Apache - php - Mysql Problem Server, Hosting und Workstations 4 15.07.2004 17:09
Apache und MySQL PHP Tipps 2004 10 08.07.2004 19:13
Ich brauche ein rundum-sorglos-Paket mit Apache, PHP + MySQL Server, Hosting und Workstations 9 13.06.2004 11:06
Apache / MySQL Logfile auslesen Thice PHP-Fortgeschrittene 3 01.06.2004 18:07

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php mysql transaction, mysql transaction php, mysql php transaction, php mysql transaktionen, php formulare transaktionen, transaktionen in mysql, mysql transaction funktionieren nicht, mysql transaktionen, brauch ich transaktionen mysql, zwei server für apache und mysql wie sinnvoll, mysql und tranaktionen, mysql was ist eine transaktionen, transaktion mysqli php deutsch german, mysqp transaktionene, php transaktionen sql, transaktionen mysql, php mysql transaktion über mehrere, mehrere datenbank transaktionen gleichzeitig php, transaction mysql php5, transaktionen tutorial

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:52 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.