SQL Datenbank öffnen 1 mal global aus einem Script?

Belee

Lt. Commander
Registriert
Dez. 2006
Beiträge
1.518
Hallo Leute

Nicht schimpfen ich bin neu in Sahcen MySQL :D

Folgendes...

Ich brauche die Datenbank z.B. in diversen Scripten, jetzt ist es so das ich in jedem dieser Script die Verbindungsdaten includieren..


PHP:
require($_SERVER['DOCUMENT_ROOT'] . '/xxxx/mysql.inc.php');

Jetzt frage ich mich gerade was dagegen sprechen würde wenn man diese Datei
sofort bei öffnen der Startseite includieren würde? also im Kopf der index.php.
Dann würde man sich doch dieses includieren in den ganzen Scripten die die Datenbank benötigen doch sparen. Oder ist das nicht so toll?

Zweitens...

Wenn man auf einer Seite 2 von einander unabhängige Scripte hat die die Datenbank benötigen - verschiedene Tabellen nutzen.
Muss ich trotzdem in jedem Script die Datenbenk connecten? oder reicht das wenn man das in einem macht? weil, ein Script auf der Startseite fragt die Datenbank alle 30 Sekunden ab, also ist die doch im Prinzip immer offen.

Danke.
 
Du musst die Verbindnug natürlich nur einmal herstellen.

Wird denn die Verbindung bei deinem 30-Sekunden-Script nicht wieder geschlossen? Dann kannst du natürlich auch jederzeit darauf zugreifen.
 
man sollte allerdings die verbindung beenden sobald die querys abgearbeitet wurden. wuerde es daher nicht raten die verbindung offen zu lassen nur fuer den fall das ein zweites script auch eine db-query benoetigen koennte...anders sieht es aus wenn du sicher weisst das ein weiteres script unmittelbar danach folgt welches ebenfall ein db query benoetigt - hier sollten die querys aber wirklich sehr nah beieinander liegen.
btw: wieso baut ein script von dir alle 30 sec eine verbindung zur db auf? ist dies wirklich von noeten?
 
Hallo,

wenn ein Skript abgearbeitet ist, werden automatisch alle Ressourcen wieder freigegeben, das ist doch das tolle an PHP, es ist stateless. D.h. natürlich auch, dass die Datenbankverbindung geschlossen wird. Das Skript ist abgearbeitet, wenn z. B. die Seite im Browser angezeigt wird. Beim nächsten Seitenaufruf wird dann wieder eine neue Datenbankverbindung geöffnet.
Zu beachten ist nur, dass alle Skripte, die für den Aufbau dieser einen Seite eine Datenbankverbindung benötigen, die gleiche Verbindung benutzen. Der initiale Datenbankaufbau dauert länger als eine einfache Abfrage. Außerdem kann es evtl. zu Problemen mit dem Limit der maximal gleichzeitig aktiven Datenbankverbindungen kommen.

Im normalen Einsatzfall von PHP (irgendwelche dynamischen Webseiten) würde ich daher die Datenbankverbindung offen lassen, bis das Skript beendet ist. Anders kann es natürlich aussehen, wenn man mit den Daten der Datenbank noch minutenlang irgendwelche Berechnungen durchführt.

Datenbankverbindungen fallen für mich in den Bereich der nano Optimierungen (ja, mikro ist nicht klein genug).
 
imRa schrieb:
man sollte allerdings die verbindung beenden sobald die querys abgearbeitet wurden. wuerde es daher nicht raten die verbindung offen zu lassen nur fuer den fall das ein zweites script auch eine db-query benoetigen koennte...anders sieht es aus wenn du sicher weisst das ein weiteres script unmittelbar danach folgt welches ebenfall ein db query benoetigt - hier sollten die querys aber wirklich sehr nah beieinander liegen.
btw: wieso baut ein script von dir alle 30 sec eine verbindung zur db auf? ist dies wirklich von noeten?

SchnickSchnack, ein Script rotiert kurze Texte auf der Seite, diese holt es sich via Ajax aus der DB und zeigt in Rotation immer einen neuen Text an.

Ich habe gelesen das man eine DB nur schließen sollte wenn man mehrere Datenbanken nutzt, wenn es eine und die selbe ist könnte man sie offen lassen.

Wie sähe die Sach aus wenn man z.B. 2 Datenbank nutzen würde? z.B. für die Sachen die immer benutzen werden eine, und für Sachen die hin und wieder mal benutzt werden einen anderen? geht nicht oder? weil wenn es mal dazu kommt das beide Datenbank zur gleichen Zeit geöffnet werden dann wird wohl nix gehen?

Btw. Ist das bei einem Forum nicht das selbe? hier wird die DB doch auch nie geschlossen, denn es sind ja immer reichlich User drauf und es werden ja nonstop Infos ausgelesen z.B. User die sich gerade im Forum befinden usw. da ist die 30 Sekunden Sache bei mir doch ein Witz gegen,
 
Zuletzt bearbeitet:
im forum z.b. brauchst du ja keine offene db verbindung wenn niemand online/aktiv ist. du wirst eine aktuelle themen-/beitrags-/userliste auch erst beim aufrufen einer neuen forumseite bzw der cb startseite erhalten.
den rotierenden text koenntest zu zb stats einem 30sec db abfrage intervalles auch mittels javascript realisieren. denn wie gesagt, wenn die seite keinen besucher hat wozu solltest du dann daten bereitstellen?

im grunde kannst auch problemlos zwei offene verbindungen zu verschiedenen datanbanken halten. du musst lediglich den objekten der verbindungen anders benennen. dann stellt sich wieder die frage ob du die verbindung offen halten willst oder nicht [u.a. wegen persistente verbindungen].

den inhalt in mehrere datenbanken zu teilen wuerde fuer mich auch nur sinn ergeben wenn du diese daten bei mehr als einem projekt benoetigst oder wenn es sich um ein eigenstaendiges projekt des hauptprojektes handelt [z.b. homepage/forum]
 
Zuletzt bearbeitet:
alle Verbindungen mit mysql_connect werden wie von Kju shcon gesagt automatisch bei Scriptende geschlossen, dementsprechend (und aus dem PHP Konzept) gibt es keine globalen DB-Verbindungen (außer mysql_pconnect aber das lassen wir mal unter den Tisch fallen), denn jede DB-Verbindung gilt nur für das Script, in dem sie geöffnet wird, denn andere Scripte können von der Verbindung auch gar nichts wissen.

Ja, es ist vollkommen ok, einfach eine Datei zu includieren, die die DB-Verbindung herstellt und man dann einfach auf die DB zugreifen und PHP kümmert sich am Ende des Scriptes um die Beendigung der Verbindung.
Wer das gerne noch schöner bauen möchte, bastelt sich eine eigene mysql-Queryfunktion (z.B. my_query), die erst bei dem ersten MySQL-Query eine Verbindung herstellt, dadurch müssen keine PHP-Scripte, die nie auf die DB zugreifen, eine Verbindung herstellen.
 
Ja, ein anderes Script kann natürlich nicht wissen ob eine DB schon offen ist, aber ich selbst weiß es doch.
Ich habe es probiert und es geht, ich muss nur im ersten Script welches alle 30 Sekunden auf die DB zugreifft connecten, in allen anderen gehts ohne, querys gehen problemlos.
 
ganz bestimmt nicht.
es seiden du includierst die mysqlconnect.php, aber auch dann kann es dein Script wissen, denn alles was du includierst kennt es auch, stellt es dir so vor als würde ein include oder require den Code, der in der Datei ist, die du angegeben hast, an die Stelle kopieren.
 
Zuletzt bearbeitet:
Also ich habe die Verbindungsdaten per require in den Kopf der index.php eingefügt.

Das Script was alle 30 Sekunden auf die Datenbank zugreift "via Ajax", verbindet sich und da es auch auf der Startseite ist "meine Startseite ist statisch, alles wird in ihr includiert" hält es dann wohl die DB offen bzw. wenn sich die DB doch selbst schließen sollte, dann wird sie von dem Script halt alle 30 Sekunden wieder geöffnet.

Ein weiteres Script was includiert wird "hier anzumerken, es wird ja alles in die index.php includiert, also jede Benutzung eines internen Links aktiviert die Verbindung des ersten Scripts manuell, heisst, die DB wird neu Verbunden, die 30 Sekunden also quasi aufgehoben.

Heisst, öffne ich eine andere Seite mit einem anderen Script, so ist man bereits mit der DB verbunden, ich nutze in dem zweiten Script kein connect sondern sofort ein query und es funktioniert.
 
Eine schöne Lösung wäre die Anwendung des Singleton Design Patterns. Dabei wird stets garantiert, dass es nur ein Objekt einer/dieser Klasse gibt. Dh., dass es in diesem Anwendungsfall stets ein Datenbank Objekt gibt und die Verbindung entweder geöffnet oder geschlossen ist.

Näheres Infos dazu findest du unter anderem hier.
 
Zurück
Oben