Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

wozu mysql_close()?

Diskussion: wozu mysql_close()? im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallo, ich frage mich schon seit längerem wozu es die PHP Function mysql_close() gibt. Geht es nur um die ...

Antwort
Alt 26.06.06, 18:04   #1 (permalink)
 
Registriert seit: 22.06.06
MorbZ!!! Leistung: Facit NTK
MorbZ!!! eine Nachricht über ICQ schicken
Likes: 0
Standard wozu mysql_close()?

Anzeige

Hallo,
ich frage mich schon seit längerem wozu es die PHP Function mysql_close() gibt.
Geht es nur um die Schönheit und um sauberen Code oder hat es auch irgendwelche anderen Vorteile von denen ich nichts weiss?

Ich hoffe mir kann geholfen werden,
Gruß MorbZ

MorbZ!!! ist offline   Mit Zitat antworten
Alt 26.06.06, 18:30   #2 (permalink)
 
Registriert seit: 11.07.05
RemoteC Leistung: Facit NTK
RemoteC eine Nachricht über ICQ schicken
Likes: 0
Standard

Wenn du kein mysql_close() machst, dann bleibt beim Server die Verbindung zum Client immer noch offen, selbst wenn der Client schon geschlossen wurde. Bei einer Seite mit 5 Zugriffen/Tag ist das wohl ziemlich egal, stell dir das allerdings hier im Forum oder gar bei großen Seiten á la amazon vor, da würden die Server reihenweise krepieren weil keine Bandbreite mehr zur Verfügung steht weil immer noch Pipelines offen sind die nicht mehr genutzt werden. Sicher geht es auch um schönen Code, aber gerade wenn das keine Pimperlseite ist oder der Server sowieso schon schwach ist, dann braucht man das unbedingt.

Edit: Nach einer Zeit wird natürlich vom Server aus die Verbindung getrennt, das kann aber ne halbe Std sein. Und in der Zeit wird nur die Servergeschwindigkeit (unnötig) minimiert
RemoteC ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 26.06.06, 18:32   #3 (permalink)
Senior Member
 
Registriert seit: 01.01.04
Prometheus Leistung: Facit NTK
Prometheus eine Nachricht über ICQ schicken
Likes: 0
Standard

Der Befehl schließ ja die Verbindung zum MYSQL-Server.
Aber wenn nicht-persistente Verbindungen genutzt werden, werden alle Datenbankverbindungen am Ende des Scriptes automatisch geschlossen.
Vielleicht ist der Befehl dann ganz nützlich, wenn das Script keine richtige Fehlerbehandlung hat und einer Endlosschleife zum Opfer wird, dann besteht die Verbindung zur Datenbank weiter.
Das würde zwar nicht unbedingt so oft vorkommen, aber ich denke mal das der Befehl eingefügt wird hat Gründe für die Sicherheit, damit Niemand so richtig an die Datenbestände der Datenbank rankommt, falls an einer anderen Stelle im Script eine Sicherheitslücke gibt.
Ich selbst weiß nicht unbedingt, wie es mit der Sicherheit von PHP aussieht, aber ich denke mal schon das man sich in PHP-Scripts irgendwie reinmogeln kann und Schaden anrichten kann oder sensible Daten erhaschen könnte. Den Gedanke habe ich aber nur, da ich weiß das es Leute gibt und Themen die sich mit der Sicherheit von PHP und SQL auseinandersetzen.
Wie es genauer aussieht, kann dir sicher einer von unseren SQL- oder PHP- Gurus sagen.

@RemoteC
Falsch, die Verbindung zum Server wird gekappt wenn das Script zuende ist.
Prometheus ist offline   Mit Zitat antworten
Alt 26.06.06, 18:35   #4 (permalink)
 
Registriert seit: 11.07.05
RemoteC Leistung: Facit NTK
RemoteC eine Nachricht über ICQ schicken
Likes: 0
Standard

Zitat:
Original von Prometheus
@RemoteC
Falsch, die Verbindung zum Server wird gekappt wenn das Script zuende ist.
Noch ein Grund meinen (unfähigen) Softwareengineering Professor zu hassen, er hat das nämlich so erzählt. Und wenn man kein sql_close() macht, dann bleibt die Verbindung so lange bestehen wie das in den Settings vom Server drinnen steht -.-

Und ich dachte schon, er hätte einmal etwas sinnvolles gesagt und ich habe mir das auch noch gemerkt
RemoteC ist offline   Mit Zitat antworten
Alt 26.06.06, 18:51   #5 (permalink)
Senior Member
 
Registriert seit: 01.01.04
Prometheus Leistung: Facit NTK
Prometheus eine Nachricht über ICQ schicken
Likes: 0
Standard

Zitat:
Original von RemoteC
Zitat:
Original von Prometheus
@RemoteC
Falsch, die Verbindung zum Server wird gekappt wenn das Script zuende ist.
Noch ein Grund meinen (unfähigen) Softwareengineering Professor zu hassen, er hat das nämlich so erzählt. Und wenn man kein sql_close() macht, dann bleibt die Verbindung so lange bestehen wie das in den Settings vom Server drinnen steht -.-

Und ich dachte schon, er hätte einmal etwas sinnvolles gesagt und ich habe mir das auch noch gemerkt
Also in meinem Buch von mitp steht es jedenfalls so drin:
"Wenn nicht-persistente Verbindungen genutzt werden, werden alle Datenbankverbindungen am Ende des Scripts automatisch geschlossen. Der Aufruf von myssql_close() ist dann nicht notwendig."
Ich verstehe das so, das es im Prinzip keine persistente Verbindungen gibt, denn da müsste man mit den Daten ständig arbeiten müssen und folglich noch das Script laufen muss um das zu gewährleisten.

Aber wenn dir das ein Prof. erzählt hat, muss das schon irgendwie auf der einen Seite stimmen.
Warten wir einfach mal unsere PHP und SQL - Gurus ab.
Prometheus ist offline   Mit Zitat antworten
Alt 26.06.06, 19:41   #6 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Standard

Wieso Gurus, ein Blick in die Doku reicht:

Zitat:
Original aus der Doku
Die Verwendung von mysql_close() ist für gewöhnlich nicht notwendig, weil offene, nicht persistente Verbindungen automatisch mit Beendigung des PHP-Skripts geschlossen werden. Siehe auch Freigabe von Resourcen.
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Alt 26.06.06, 21:07   #7 (permalink)
 
Registriert seit: 26.06.06
7even Leistung: Facit NTK
Likes: 0
Standard

Hehe, es lebe GuruTFM!

..aber ich muss zugeben, ich wusste das auch nicht mehr - obwohl ichs extra mal nachgelesen hatte, weil ich mir dieselbe Frage gestellt hatte..
7even ist offline   Mit Zitat antworten
Alt 26.06.06, 21:53   #8 (permalink)
Senior Member
 
Registriert seit: 01.01.04
Prometheus Leistung: Facit NTK
Prometheus eine Nachricht über ICQ schicken
Likes: 0
Standard

Zitat:
Original von LX
Wieso Gurus, ein Blick in die Doku reicht:

Zitat:
Original aus der Doku
Die Verwendung von mysql_close() ist für gewöhnlich nicht notwendig, weil offene, nicht persistente Verbindungen automatisch mit Beendigung des PHP-Skripts geschlossen werden. Siehe auch Freigabe von Resourcen.
Da sind wir aber immer noch nicht weiter, das was du hier geschrieben hast habe ich auch schon festgestellt.
Prometheus ist offline   Mit Zitat antworten
Alt 28.06.06, 19:13   #9 (permalink)
 
Registriert seit: 26.05.06
coderinblack Leistung: Facit NTK
Likes: 0
Standard

mysql_close() bringt nur was, bei scripten in denen irgentwann keine Datenbank abfragen stattfinden.

z.b. ein gaestebuch, alle daten holen, verbindung schließen und erst dann die daten aus der DB verarbeiten.
so spart man bei vielen besuchern (aber auch nur dann) bandbreite und man kann natürlich seine scripte auch auf geschwindigkeit optimieren.

andere gruende waeren mir unbekannt.

mfg
coderinblack
coderinblack ist offline   Mit Zitat antworten
Alt 28.06.06, 22:03   #10 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Lightbulb

coderinblack:
Sprichst du vom Caching von DB-Abfragen? Ansonsten wüsste ich nicht, wo darin die Optimierung von Skripten liegen könnte, geschweige denn eine Einsparung von Bandbreite (zumal das DBMS in den meisten Fällen auf dem localhost liegt). Und bei einem selbst gebastelten Cache spielt es dann auch keine Rolle, ob da irgendwo ein mysql_close() drin steht

Prometheus:
Zitat:
Da sind wir aber immer noch nicht weiter, das was du hier geschrieben hast habe ich auch schon festgestellt.
Den PHP-Entwicklern und -Dokuschreibern würde ich mal eher vertrauen als RemoteCs Prof, darum ging es mir. Was willst du denn noch dazu wissen, was dich "weiterbringen" würde?
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Alt 28.06.06, 22:28   #11 (permalink)
Member of Honour
 
Registriert seit: 07.12.04
end4win hat die Renommee-Anzeige deaktiviert
Likes: 256
Standard RE: wozu mysql_close()?

Vielleicht, überlegt ihr mal welche Vorteile es hat eine ungenutzte Datenbankverbindung
bis zum Ende des Skriptes offenzulassen?
Ausser Schonung der Tastatur fällt mir keiner ein.
Ansonsten sehe ich offene Verbindungen immer als Risiko.

Gruss
__________________
Die deutsche Rechtschreibung ist Freeware, daher darf man sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, dies bedeutet man darf sie nicht verändern oder in veränderter Form
veröffentlichen.
end4win ist offline   Mit Zitat antworten
Alt 28.06.06, 23:18   #12 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Lightbulb RE: wozu mysql_close()?

Zitat:
Original von end4win
Vielleicht, überlegt ihr mal welche Vorteile es hat eine ungenutzte Datenbankverbindung
bis zum Ende des Skriptes offenzulassen?
Ausser Schonung der Tastatur fällt mir keiner ein.
Das wären schonmal mehr Vor- als Nachteile

Es mag für ein einzelnes Skript mit einer Abfrage deutlich sein, dass danach nix mehr kommt. Aber bei größeren Projekten kann man nicht bei jeder Abfrage mit Sicherheit sagen, dass dies in jedem Fall die letzte sein wird. Und vor jeder Datenbankabfrage eine Verbindung zu öffnen und sie danach wieder zu schließen ist auch nicht gerade performant.

Eine Sicherheitslücke ist eine offene Datenbankverbindung jedenfalls nicht. Sicherheitsrelevant wird es erst dann, wenn die Verbindung auch genutzt wird, und darauf muss man so oder so achten.
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Alt 02.07.06, 12:31   #13 (permalink)
Member of Honour
 
Registriert seit: 07.12.04
end4win hat die Renommee-Anzeige deaktiviert
Likes: 256
Standard RE: wozu mysql_close()?

Zitat:
Sicherheitsrelevant wird es erst dann, wenn die Verbindung auch genutzt wird, und darauf muss man so oder so achten.Sicherheitsrelevant wird es erst dann, wenn die Verbindung auch genutzt wird, und darauf muss man so oder so achten.
1. Nachteil, es ist ein Risiko, da die offene Verbindung auch von einem Angreifer genutzt werden kann.
2. Nachteil: ein erneutes mysql_connect() im Skript nutzt nicht die offene Verbindung, sondern stellt eine neue Verbindung her!
Gerade bei grossen Projekten, wo unter Umständen auch noch mit unterschiedlichen Rechten auf Datenbanken zugegriffen wird, sind dann mehrere Verbindungen offen.

Jetzt hast du mehr Nachteile, wie Vorteile!

btw. Ich weiss auch bei meinen grösseren Skripten wann keine Datenbankverbindung mehr
nötig ist. Da steht dann immer mysql_close()

Gruss
__________________
Die deutsche Rechtschreibung ist Freeware, daher darf man sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, dies bedeutet man darf sie nicht verändern oder in veränderter Form
veröffentlichen.
end4win ist offline   Mit Zitat antworten
Alt 02.07.06, 21:04   #14 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Lightbulb RE: wozu mysql_close()?

Zitat:
Original von end4win
1. Nachteil, es ist ein Risiko, da die offene Verbindung auch von einem Angreifer genutzt werden kann.
Wie klaut ein Angreifer eine offene Datenbankanbindung zum localhost? Wenn er Zugriff auf die Scripte selbst hat, kann er auch problemlos eine neue Verbindung öffnen, wenn er zwischen Skript- und DB-Server hockt, liegt ein viel gravierenderes Sicherheitsrisiko vor

Zitat:
2. Nachteil: ein erneutes mysql_connect() im Skript nutzt nicht die offene Verbindung, sondern stellt eine neue Verbindung her!
Richtig, aber du bräuchtest dann jederzeit ein mysql_connect(), wenn du auf die Datenbank zugreifen möchtest, anstatt einfach zu Beginn der Datenbankinitialisierung eine Verbindung zu öffnen und dann mit mysql_query() beliebig viele Abfragen zu starten. Über den Performanceunterschied zwischen sagen wir 100 Abfragen am Stück in der gleichen Verbindung und 100 Abfragen in ebensovielen verschiedenen Verbindungen, müssen wir uns glaub ich nicht unterhalten.

Zitat:
btw. Ich weiss auch bei meinen grösseren Skripten wann keine Datenbankverbindung mehr
nötig ist.
Das kommt dann wohl auf die Art des Projektes an. Wie gesagt, für ein popliges Gästebuch o.ä., wo an einer einzelnen Stelle einfach alles aus der Datenbank ausgelesen wird und danach nix weiter passiert, spielt das keine Rolle. Aber wenn die aus der DB ausgelesenen Inhalte wiederum als Bedingungen für weitere Abfragen gelten, dann wird das schnell sehr unübersichtlich.

Aber nunja, jeder nach seiner façon. Ab einer bestimmten Projektgröße sollte man lieber sowieso auf Datenbankabstraktionen wie DB::QueryTool aus PEAR o.ä. zurückgreifen
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Alt 02.07.06, 21:15   #15 (permalink)
 
Registriert seit: 16.02.04
treo Leistung: Facit NTK
treo eine Nachricht über ICQ schicken
Likes: 0
Standard

sieh es mal so: du hast ein großes script, dieses holt sich die daten und schließt dann die verbindung. Die Daten werden aufwendig weiter verarbeitet, das ganze dauert eine sekunde.
nun hast du z.b. 60 Aufrufe pro sekunde auf der seite, das würde dann 60 offene verbindungen machen. Ich hab schon fälle gesehen wo aber schon nach 10 verbindungen dicht gemacht wird. Wenn nun nach dem Holen der Daten (für das beispiel mal 0.1sek angenommen) die Verbindung geschlossen wird so hast du nur noch durchschnittlich 6 offene verbindungen, was dir in die richtung etwas mehr platz verschafft.
treo ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » wozu mysql_close()?
Themen-Optionen
Ansicht

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

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
wozu schlüssel bei truecrypt stefan19652 Cryptography & Encryption 4 11.10.08 15:23
Wozu dienen Dienste wie lix.in? mcjack Internet Allgemein 5 01.01.08 09:47
WOzu IP-Adresse C++ (In)security allgemein 8 10.08.05 23:16
Wozu 2. IP bei Dedicated Server? xister Internet Allgemein 3 12.05.05 14:43
Wozu ist ein forum??? NEWproblem Hackerboard.de-Feedback 4 14.04.04 17:00


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61