php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.10.2010, 15:03  
Benutzer
 
Registriert seit: 18.06.2009
Beiträge: 42
PHP-Kenntnisse:
Fortgeschritten
Leichti befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] MySql Transaktionen und PDO

Hallo
Derzeit arbeite ich gerade an einem kleinen Projekt, dabei bin ich über PDO sowie Transaktionen gestolpert.

Soweit ich mich informiert habe dienen Transaktionen in erster Linie dazu, nicht von anderen Datenbankverbindungen gestört zu werden.

Nun habe ich allerdings zwei Probleme, Problem Nr 1
PHP-Code:
    $dbh->beginTransaction();
    
$dbh->exec("DELETE FROM article");
    
$dbh->rollBack();
    
$dbh->commit(); 
Wirft mir PDO eine Exception
Zitat:
'PDOException' with message 'There is no active transaction'
Es wird nichts aus der Tabelle article gelöscht, liegt wohl daran dass die Ausführung des Scripts durch das Werfen der Exception beim Aufruf der Methode rollBack() unterbrochen wird. Lasse ich rollBack() weg, werden alle Artikel in article gelöscht.
Das Tabellenformat habe ich bereits auf InnoDB gestellt.

Weiters führt folgender Code auch zu einer Exception
PHP-Code:
        $dbh->beginTransaction();
        
$dbh->exec("SELECT * FROM skitour_tourarticle");
        
$dbh->exec("SELECT * FROM skitour_tourarticle");
        
$dbh->rollBack();
        
$dbh->commit(); 
Die Exception:
Zitat:
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
Hier verstehe ich nicht ganz das Problem von PDO.

Ich bitte euch um Hilfe, bzw auch um Links, ich habe bereits stundenlang gegoogelt, allerdings mit keinem wirklich gleichen Problem. (Eventuell hängt Probleme Nr 2 mit irgendeinem falschen MySql Client zusammen, habe aber keine Ahnung was damit gemeint ist).

Das Ganze läuft unter dem neuesten XAMPP Windows 7

mfg Leichti
Leichti ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 01.10.2010, 15:32  
Neuer Benutzer
 
Registriert seit: 23.11.2008
Beiträge: 27
PHP-Kenntnisse:
Anfänger
magpie befindet sich auf einem aufstrebenden Ast
Standard

Also der Grund warum es dir alles löscht ist ganz einfach. Du gibst keine Bedingung an! Sprich deine SQL-Anfrage ist schon mal nicht vollständig.
Code:
DELETE FROM Tabelle WHERE Bedingung
Zu deinem 2. Problem. Ich vermute mal dass das Probem die beiden exec sind. Warscheinlich erlaubt PDO nur ein exec pro Transaktion.
magpie ist offline   Mit Zitat antworten
Alt 01.10.2010, 15:58  
Erfahrener Benutzer
 
Registriert seit: 24.10.2008
Beiträge: 298
PHP-Kenntnisse:
Fortgeschritten
KarlEgon befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
PHP-Code:
$dbh->beginTransaction();
    
$dbh->exec("DELETE FROM article");
    
$dbh->rollBack();
    
$dbh->commit(); 
Soweit ich weiß, machst du entweder ein rollBack oder ein commit und nicht beides zusammen
KarlEgon ist offline   Mit Zitat antworten
Alt 01.10.2010, 16:05  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Der Sinn von Transaktionen besteht darin, komplexe Operationen "als Ganzes" zu verarbeiten..
Sollte bei einem Zwischenschritt ein Fehler auftreten, können alle bisherigen Aktionen der Transaktion durch ein Rollback rückgängig gemacht werden. Hat alles fehlerfrei geklappt, wird durch ein Commit die Transaktion durchgeführt (d.h. die Änderungen werden tatsächlich in der Datenbank gespeichert).

http://de.wikipedia.org/wiki/Transak...8Informatik%29
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 01.10.2010, 18:36  
Erfahrener Benutzer
 
Registriert seit: 08.08.2009
Beiträge: 195
PHP-Kenntnisse:
Fortgeschritten
da.eXecutoR befindet sich auf einem aufstrebenden Ast
Standard

Mal ein kleines Beispiel, da ich heute genau das gleiche zum ersten mal verwendet habe:

PHP-Code:
// Starting my transaction
$db->beginTransaction();
$foreach($users as $user){
    
$sql "INSERT INTO personen SET name='".$user['name']."'";
    
$db->exec($sql);
}

if(
$sql->errorCode() <> '00000'){
    
$db->rollback();
}else{
    
$db->commit();

Transaction geben dir die Möglichkeit sicherzustellen dass wenn du Abhängige SQL Statements ausführen willst diese entweder alle Erfolgreich ausgeführt werden, oder gar keine Änderungen an der Datenbank gemacht werden. Kleines Keyword dazu ( Autocommit-Modus seitens Datenbank ).
__________________
It's not a bug. It's a feature!
da.eXecutoR ist offline   Mit Zitat antworten
Alt 02.10.2010, 06:15  
Benutzer
 
Registriert seit: 18.06.2009
Beiträge: 42
PHP-Kenntnisse:
Fortgeschritten
Leichti befindet sich auf einem aufstrebenden Ast
Standard

Ok vielen Dank!
Die erste Exception wurde von commit() geworfen, da ja rollBack die Transaction beendet.
Leichti ist offline   Mit Zitat antworten
Alt 02.10.2010, 12:22  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Es macht ja absolut keinen Sinn einen Rollback und ein Commit durchzufuehren. Da gibt es nur entweder oder.

Ich verschachtele das haeufig so:
PHP-Code:
<?php
$this
->beginTransaction();
try {
  
// .. SQL Zeug
  
if ($affectedRows != 1) {
    throw new 
Exception("ungueltiges UPDATE");
  }
  
$this->commit();
} catch (
Exception $e) {
  
$this->rollback();
}
?>
Damit faengst du dann alle technischen (geworfene E_NOTICE) genauso wie die logischen Fehler (Anzahl der Affected Rows z.B. nicht gleich 1). Vorausgesetzt du biegst Errors in Exceptions um, aber ich denke das ist ja mittlerweile Standard.
__________________
"Nuschel ich?" - "Was?"
Chriz ist gerade online   Mit Zitat antworten
Alt 02.10.2010, 18:28  
Benutzer
 
Registriert seit: 18.06.2009
Beiträge: 42
PHP-Kenntnisse:
Fortgeschritten
Leichti befindet sich auf einem aufstrebenden Ast
Standard

Ist mir schon klar, es war auch nur testweise...
Leichti ist offline   Mit Zitat antworten
Alt 02.10.2010, 18:30  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Wenn du hier eine Frage stellst, wieso postest du dann "testweise" Blödsinn? ...
__________________
"Nuschel ich?" - "Was?"
Chriz ist gerade online   Mit Zitat antworten
Alt 02.10.2010, 21:41  
Benutzer
 
Registriert seit: 18.06.2009
Beiträge: 42
PHP-Kenntnisse:
Fortgeschritten
Leichti befindet sich auf einem aufstrebenden Ast
Standard

Da ich gedacht hatte, ein rollBack muss innerhalb einer Transaktion stehen. Wusste nicht das ein rollBack eine Transaktion beendet, obwohl es eigentlich logisch ist .
Hatte das hier zuvor schon gelesen http://www.php.net/manual/de/pdo.transactions.php hätte eigentlich selbst draufkommen müssen.. Man sieht den Wald vor lauter Bäumen nicht

mfg
Leichti ist offline   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 funktioniert nicht (Erweiterung nicht erkannt!?) pfump Server, Hosting und Workstations 10 17.03.2012 11:07
PDO: Mysql client compression naitsirch PHP Tipps 2010 4 01.03.2011 11:20
[Erledigt] PHP bekommt keine Verbindung zu MySQL SaKe Datenbanken 15 20.09.2010 14:45
Mysql fehler bei externen Zugriff SteiniKeule Datenbanken 4 18.06.2010 12:54
PDO MySQL abfrage funktioniert nicht Bloodydead PHP Tipps 2010 8 18.06.2010 11:08
MySQL Prozeduren mit Rückgabewert als PDO spaceship Datenbanken 9 20.04.2010 08:24
Erkenntnisse aus der MySQL -> Oracle migration Donald Datenbanken 9 13.04.2010 14:24
[Erledigt] PDO: Allgmeine Fragen, Zeit messen christophM Datenbanken 2 19.05.2009 23:12
Lerne Grundlagen | Quellensammlung cycap PHP Einsteiger 0 12.11.2008 16:23
[Erledigt] MySQL - ERROR 1044 bei erstellen einer Datenbank _youngenterpriser_ Datenbanken 2 05.02.2008 17:56
Mysql Server Einstellunen Optimieren pchero Datenbanken 3 01.05.2007 19:50
[Erledigt] not allowed to connect to this MySQL server PHP Tipps 2005-2 2 23.09.2005 18:34
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
MYSQL läuft nur wenn /tmp auf 777 Datenbanken 5 06.07.2005 08:38
mysql root passwort vergessen Datenbanken 1 29.05.2005 11:33

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php pdo transaction, pdo transaktionen, pdo mysql transaction, pdo transaction mysql, http://www.php.de/php-fortgeschrittene/72405-erledigt-mysql-transaktionen-und-pdo.html, php mysql transaktionen, mysql transaktionen, mysql transaktionen mit pdo und php, php pdo transaktionen, pdo transaktionen php, pdo begintransaction mysql, pdo mysql delete, php pdo rollback, pdo transaktion, pdo transaction, mysql pdo transaction, mysql aktive transaktionen anzeigen, php mysql pdo delete, begin transaction mysql pdo, pdo begin transaction mysql

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:34 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