php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.04.2006, 20:36  
Benutzer
 
Registriert seit: 23.07.2004
Beiträge: 59
mrSpok
Standard mysql klasse - handling mehrerer connections

hallo forum,

ich arbeite zurzeit an einem projekt, welches verbindungen zu mehreren mysql-servern aufbauen muss - soweit so gut...

nun habe ich mir eine klasse gebaut, welche mir vieles vereinfacht - jedoch stehe ich ziemlich auf dem schlauch (oder gar davor..), wie ich nun das ganze mit den connections bzw. der übergabe deren anstelle, da klassen noch etwas neuland für mich sind...

da connections zu mehreren servern aufgebaut werden, kam ich bis anhin (mit meinen zig funktionen) nicht wirklich drum herum jeweils die connection bei jeder query mitzugeben.
dies nimmt mir nun die klasse ab...
nun stellte ich mir die frage - wie stelle ich dies nun mit klassen an - wich mache ich das richtig?
übergebe ich ein mysql-klassen-objekt an meine nackten funktionen? nicht doch oder?
in jeder funktion ein neues objekt erstellen, die query absetzen und die connection wieder kappen? hm - dies würde funktionieren und wäre auch wunderbar um eine saubere ausbaubare library zu erstellen... aber macht 'profi' dies wirklich so?

danke schonmal
mrSpok ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 13.04.2006, 21:56  
Erfahrener Benutzer
 
Registriert seit: 17.01.2005
Beiträge: 227
Mirod
Standard

Hallo mrSpok,

ich nehme an, du hast eine Klasse, sagen wir myConnection, in der hast du verschiedene Funktionen drin (connect, query, fetch, disconnect....). Nun baust du dir jeweils ein Objekt dieser Klasse:

PHP-Code:
$objekt1 = new myConnection('localhost''user''passwort''datenbank'); 
Soweit so gut.
Um jetzt anhand von diesem Objekt eine Verbindung aufzubauen, rufst du

PHP-Code:
$objekt1->connect(); 
auf. Innerhalb dieser Funktion connect() verbindest du zu deiner mySQL-Datenbank und weist das der Klassenvariable $connection zu.

Jetzt kannst du für deine verschiedenen Objekte jeweils einmal verbinden und anschliessend per

PHP-Code:
$objekt->query('Select * FROM tabelle'); 
jeweils die Queries abschicken. Innerhalb dieser Klassenfunktion "query" holst du dann die Klassenvariable $connection, um das query auch wirklich über die angegebene Connection zu schicken.

Mein Tipp ;>


Grüsse Mirod
Mirod ist offline  
Alt 13.04.2006, 23:56  
Benutzer
 
Registriert seit: 23.07.2004
Beiträge: 59
mrSpok
Standard

hi mirod

danke für deine hilfe - so mach ich das bereits - funktioniert auch prima!

mein problem ist, dass ich beispielsweise zwei funktionen habe:

funktion1 sollte die mysqlconnection von objekt1 nutzen.
funktion2 die von objekt2....

nun fragte ich mich einfach, wie ist es 'üblich' funktion1 mitzuteilen, dass sie objekt1 nutzen soll?
etwa so?
PHP-Code:
<?php
echo funktion1($objekt1);
?>
oder erfinde ich in jeder funktion die welt neu - also:

PHP-Code:
<?php
function funktion2()
{
   
$objekt2=new objekt2();
   
$objekt2->query($sql);
   
// usw...
}
?>
natürlich funktioniert beides. aber wie macht man dies wirklich?

grz
mrSpok ist offline  
Alt 14.04.2006, 00:08  
Gast
 
Beiträge: n/a
Standard

Ist es den Funktionen egal, was für ein Verbindungsobjekt sie benutzen, wie es "entstanden ist" und welche Einstellmöglichkeiten es geben könnte? Und werden die Aktionen einer Funktion auf eine Verbindung angewendet, ohne dass vorherige oder darauffolgende Aktionen stören?
Dann übergibt es als Parameter.
 
Alt 14.04.2006, 00:13  
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

Hallo mrSpok,

das ist einer der klassischen Fälle, in der das Singleton-Pattern Anwendung findet. In allen deinen Funktionen kannst du dann genau dieses eine Objekt nutzen und es auch ansprechen. Es würde sich dann wie folgt verhalten (nur Beispielcode!):

PHP-Code:
<?php

function a(){
   
$SQLKlasse = &Singleton::getInstance('SQLKlasse');
   
$SQLKlasse->executeQuery(...);

   ...

   return 
$Ergebnis;
}

function 
b(){
   
$SQLKlasse = &Singleton::getInstance('SQLKlasse');
   
$SQLKlasse->executeQuery(...);

   ...

   return 
$Ergebnis;
}

...
Du würdest nun in jeder der Funktionen, oder auch Klassen und Programmteilen immer nur eine Instanz der MySQLKlasse verwenden.

Grüße,
Dr.E.
__________________
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  
Alt 14.04.2006, 01:05  
Benutzer
 
Registriert seit: 23.07.2004
Beiträge: 59
mrSpok
Standard

hallo zusammen,

Zitat:
Zitat von Bruchpilot
Ist es den Funktionen egal, was für ein Verbindungsobjekt sie benutzen, wie es "entstanden ist" und welche Einstellmöglichkeiten es geben könnte?
jein...
die einstellmöglichkeiten werden mithilfe einer variable 'beim erstellen' des objektes aus der config.ini gelesen.
objekt1 wird immer zu server1 connecten, es sei denn ich setzte die server-variable neu -> eine weitere möglichkeit.
ich ergänze mein beispiel: funktion1 nutzt nur server1, funktion2 nur server2 und funktion3 soll bei nutzen können


Zitat:
Zitat von Bruchpilot
Und werden die Aktionen einer Funktion auf eine Verbindung angewendet, ohne dass vorherige oder darauffolgende Aktionen stören?
Dann übergibt es als Parameter.
funktionieren tut dies im moment - ich frag mich halt wie ausbaufähig dies schlussendlich sein wird. das ganze projekt ist modular aufgebaut.


Zitat:
Zitat von dr.e.
das ist einer der klassischen Fälle, in der das Singleton-Pattern Anwendung findet
das klingt sehr interessant - ich hab mich in der kurzen zeit etwas schlau gemacht... doch leider kann ich dir nicht ganz folgen - bzw. muss mich eingehender damit befassen.
trotzdem aber eine frage.
ist es damit möglich aus der funktion (oder klasse) heraus direkt auf ein objekt zuzugreifen, welches zb. server1 'beinhaltet' - das wäre ja klasse!

danke euch
mrSpok ist offline  
 


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
eigene Klasse für mySql PW und UN Reen_Sc Datenbanken 4 09.07.2008 16:15
PHP + MySQL zwei Instanzen vertragen sich nicht Leisurelarry PHP Tipps 2008 11 04.10.2007 16:45
Mysql Server Einstellunen Optimieren pchero Datenbanken 3 01.05.2007 19:50
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
OOP => MySQL Klasse Kein Genie PHP Tipps 2007 16 16.03.2007 14:57
tutorial mysql klassen im oop projekt phpdummi Beitragsarchiv 4 17.01.2007 20:17
MySQL - Klasse: Wie da mysql_close benutzen Igäl PHP Tipps 2006 5 01.10.2006 23:09
MySQL Server startet nicht mehr richtig... Datenbanken 16 03.03.2006 19:40
Kein Zugriff über ODBC mit der IP-Adresse auf MySql DB Datenbanken 4 09.02.2006 11:04
Wann persistente MySQL Connections einsetzen? HStev PHP-Fortgeschrittene 2 02.02.2006 13:14
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
mysql root passwort vergessen Datenbanken 1 29.05.2005 11:33
Habe Mysql KLasse geschrieben, aber... Spike_php PHP-Fortgeschrittene 10 27.03.2005 09:15
[Erledigt] PHP5 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;a m p; MySQL Datenbanken 5 01.08.2004 05:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql klasse php oop ini, klassen verbinden php

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

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