php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.10.2008, 18:49  
Neuer Benutzer
 
Registriert seit: 23.10.2008
Beiträge: 1
Farcaster befindet sich auf einem aufstrebenden Ast
Standard Mehrere Klassen mit DB-Zugriff produzieren einen Fehler

Folgendes Szenario:

Ich habe eine Klasse, die mir Bilder abspeichert und ihnen eine Galerie zuweist.
und eine Funktion in der Foto-Klasse, die einen neuen SortierIndex in die selbe Tabelle schreibt.

PHP-Code:
class foto {
     function 
save() {
          
DB::getDB()->sendQuery(insert into foto...);
          
$galerie = new galerie();
          
$galerie->update();
     }
     function 
sortiere() {
          
DB::getDB()->sendQuery(Select galerie from fotos ...);
          
DB::getDB()->sendQuery(Update fotos set sortindex ...);
     }
     function 
activate() {
         
$this->save();
         
$this->sortiere();
     }


}
class 
galerie {
     function 
update() {
          
DB::getDB()->sendQuery(update fotos set galerie = ...);
     }

Wenn ich das nun für ein Foto mache, funktioniert das Problemlos, ... ABER ... wenn ich nun mehrere Fotos habe, und diese mit foreach{} durchgehe, dann bricht er unterschiedlich einmal nach dem ersten, einmal nach dem 4. einmal nach dem 3. etc. ab. und bringt die Fehlermeldung, dass das SELECT Statement (Select galerie from fotos) in der Sortier-Funktion ungültig ist, weil er keine gültige galerie hat - als wäre die galerie noch nicht in der tabelle upgedatet.

Wenn ich aber nun eine kleine Zeitverzögerung hinzufüge

PHP-Code:
function activate() {
         
$this->save();
         
sleep(2);
         
$this->sortiere();
     } 
dann funktioniert wieder alles einwandfrei.
Es scheint, als würde er nicht warten, bis das save() fertig ist, ehe er das sortiere() aufruft.

kann man das irgendwie abfangen bzw. verhindern?

Irgendjemand eine Idee?
Danke für eure Hilfe.
Farcaster ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 23.10.2008, 23:24  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Farcaster Beitrag anzeigen
Folgendes Szenario:

Ich habe eine Klasse, die mir Bilder abspeichert und ihnen eine Galerie zuweist.
und eine Funktion in der Foto-Klasse, die einen neuen SortierIndex in die selbe Tabelle schreibt.

PHP-Code:
class foto {
     function 
save() {
          
DB::getDB()->sendQuery(insert into foto...);
          
$galerie = new galerie();
          
$galerie->update();
     }
     function 
sortiere() {
          
DB::getDB()->sendQuery(Select galerie from fotos ...);
          
DB::getDB()->sendQuery(Update fotos set sortindex ...);
     }
     function 
activate() {
         
$this->save();
         
$this->sortiere();
     }


}
class 
galerie {
     function 
update() {
          
DB::getDB()->sendQuery(update fotos set galerie = ...);
     }

Wenn ich das nun für ein Foto mache, funktioniert das Problemlos, ... ABER ... wenn ich nun mehrere Fotos habe, und diese mit foreach{} durchgehe, dann bricht er unterschiedlich einmal nach dem ersten, einmal nach dem 4. einmal nach dem 3. etc. ab. und bringt die Fehlermeldung, dass das SELECT Statement (Select galerie from fotos) in der Sortier-Funktion ungültig ist, weil er keine gültige galerie hat - als wäre die galerie noch nicht in der tabelle upgedatet.

Wenn ich aber nun eine kleine Zeitverzögerung hinzufüge

PHP-Code:
function activate() {
         
$this->save();
         
sleep(2);
         
$this->sortiere();
     } 
dann funktioniert wieder alles einwandfrei.
Es scheint, als würde er nicht warten, bis das save() fertig ist, ehe er das sortiere() aufruft.

kann man das irgendwie abfangen bzw. verhindern?

Irgendjemand eine Idee?
Danke für eure Hilfe.
wenn du schon etwas von zeitverzögerung schreibst, so wird wohl mysql delayed insert an sein.

aber was anderes: warum sortierst du nicht bevor du etwas in die datenbank schreibst? das würde dir die ganzen update querys sparen.
falls du aus irgendeinem grund denkst, das es notwendig ist das zu tun, so benutz zumindest innodb mit einer transaktion...
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline   Mit Zitat antworten
Alt 23.10.2008, 23:39  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
falls du aus irgendeinem grund denkst, das es notwendig ist das zu tun, so benutz zumindest innodb mit einer transaktion...
Da stimme ich zu. Solltest du mehrere Datenbanken addressieren, ist es wichtig in der Abstraktionsschicht immer die Verbindungsressource explizit anzugeben, sonst kommt es zu Überlagerungen. Letzteres hat mich mal 2 Tage und einen Haufen Nerven gekostet.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. 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
bitte hilfe! mysql fehler meldung: basicx PHP Tipps 2008 2 22.07.2008 16:36
mysql fehler meldung: basicx Datenbanken 1 22.07.2008 09:48
Klassen sinnvoll nutzen, Grundlegendes nikosch PHP-Fortgeschrittene 1 30.09.2006 22:08
[Erledigt] Mysql Syntax Fehler Datenbanken 3 06.07.2006 09:58
[Erledigt] Seite wird nicht angezeigt, untersch. Fehler bei IE/FF/Safar PHP-Fortgeschrittene 19 31.05.2005 14:52
klassen und methoden anderer klassen in methoden.... PHP Tipps 2005 17 25.05.2005 09:46
Blöder MySQL Fehler PHP Tipps 2005 3 15.05.2005 03:14
403 Fehler beim zugriff auf tiefere Verzeichnisebene Server, Hosting und Workstations 5 21.04.2005 14:29
Klassen PHP Tipps 2005 5 09.04.2005 18:51
Fehlermeldung - aber kein fehler... Tschuu HTML, Usability und Barrierefreiheit 16 14.03.2005 15:56
Klassen in Klassen verwenden PHP Tipps 2005 5 23.02.2005 14:08
Wo liegt der fehler?? PHP-Fortgeschrittene 5 22.12.2004 09:54
mysql_real_escape_string - Fehler Schaelle Datenbanken 0 03.07.2004 23:32
Paradox, Fehler bei Berechnung in MySQL MrNiceGuy Datenbanken 0 23.06.2004 16:09

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php mehrere klassen mysql, zugriff auf mehrere classen php, php db zugriff aus klasse, sendquery insert, \'db::getdb()\', php class galerie, fehler html produzieren

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