php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 15-05-2008, 22:16
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard [MSSQL] Verständnisfrage und Angst... :)

Hallo alle zusammen,

Ich arbeite nun schon eine Ewigkeit an meinem eigenen kleinen System und seit dem ich dieses auch mal auf meiner 1&1 Domain laufen habe, ist mir etwas aufgefallen..... daher eine grundsatzfrage zur Verwendung von MySQL.

Wie muss ich es genau verwenden?

Ich habe seit Anfang an eine eigene Klasse, die ich dafür verwendet.
Brauche ich eine DB Abfrage, so erzeuge ich mir ein Object.... dieses stellt die DB Verbindung her.... führt den Query aus und schließt direkt danach die DB wieder. Somit kann ich schön sauber die Daten wie ich sie brauche aus meinem Object holen.

oder muss man es doch so machen:

DB Connect herstellen
...
... Seite abarbeiten...
...
DB Connect schließen

Ich muss dazu sagen... mein gesamtes System basiert förmlich auf meiner Klasse und nutzt an allen Ecken und Enden diese Objekte.
Mir ist nun aufgefallen, dass mein System auf meinem 1&1 Server öfter mal keine DB Verbindung aufbauen kann und somit natürlich nichts mehr geht und ich die Seite manchmal sogar mehrfach aktualisieren muss.

Bitte sagt mir, dass ich bisher korrekt gearbeitet habe .... ansonsten kann ich mein System zum Teufel schicken glaube ich, wenn das bei anderen Servern auch so krass ist.
Ich hab die längste Zeit lokal gearbeitet und hatte somit nie Schwierigkeiten mit den DB Verbindungen..... daher wundert mich das jetzt.

Ich hoffe ihr könnt mir etwas positives dazu sagen.

Gruß Mario
Mit Zitat antworten
  #2 (permalink)  
Alt 15-05-2008, 22:30
XGremliN
 PHP Senior
Links : Onlinestatus : XGremliN ist offline
Registriert seit: Sep 2003
Ort: Karl-Marx-Stadt
Beiträge: 1.900
XGremliN ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich würde mal sagen auf dem prinzip basieren viele systeme. ohne code oder nähere infos kann man da wenig zu sagen
__________________
it's not a bug,
it's a feature!
Mit Zitat antworten
  #3 (permalink)  
Alt 15-05-2008, 22:38
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard [MSSQL] DB

Ja ... welches Prinzip wäre nun das korrekte? Das wäre auch meine eigentliche Frage dazu.

Mache ich es richtig, so wie ich es bislang mache oder sollte man es so machen?

DB Connect herstellen
...
... Seite abarbeiten...
...
DB Connect schließen


Ich arbeite hingegen bisher so, dass ich bei jeder DB Abfrage die Verbindung herstelle... die Daten aus der DB hole / oder schreibe und direkt danach die Verbindung wieder schließe.

Dadurch habe ich gerade solche Bedenken.

Gruß Mario
Mit Zitat antworten
  #4 (permalink)  
Alt 15-05-2008, 22:47
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Nein, du solltest die Verbindung offen halten. Selbst ganz am Ende des Scripts muss sie nicht geschlossen werden. Das macht PHP automatisch.
Wirklich aktiv schließen muss man eine DB-Verbindung nur dann, wenn man weiß, dass der weitere Code noch sehr lange irgendwas macht, aber dabei die DB nicht mehr benutzt.

Das Auf- und Abbauen der Verbindung kostet nur Zeit und bringt in Sachen Sicherheit überhaupt nichts.
Mit Zitat antworten
  #5 (permalink)  
Alt 15-05-2008, 23:00
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard [MSSQL] DB Verbindung

Okay... das ist eine Antwort.
Auch wenn ich nun vor einem Problem stehe.

Hättest du evtl. noch einen Tip, wie ich das ganze weiterhin über meine Klasse nutzen könnte? Kurz nochmal zum Verständnis, wie ich "bisher" gearbeitet habe.

1. ich erzeuge mir ein DB Object
2. Ich übergebe mein Query in das Object
3. Ich führe das Query aus
- hier baut der die Verbindung auf
- führt das Query und evtl. noch ein paar kleine Dinge aus
- DB Verbindung wird geschlossen

4. Ich hole mir meine Daten wie ich sie brauche aus meiner Klasse.

Da ich mich ja innerhalb eines Objects befinde, weiß ich nun gerade nicht wirklich, wie ich das mit der DB Verbindung so regeln kann, dass ich die DB Verbindung im Header meiner aktuellen Datei zwar herstelle und/aber dann dennoch mit meinen Objekten den Query ausführen lassen kann.... so, dass ich am Ende jeder Seite erst die verbindung wieder schließen brauche. ( auch wenns PHP selbst machen würde .. ich bin gern korrekt dabei hehe )
Meine DB Klasse ist mir desshalb so wichtig, weil ich sie 1. natürlich mitterweile im gesamten System einsetze und 2. weil diese mir die geholten Daten schon aufbereitet, wie ich sie später weiter verwenden will/muss.
Nur soweit ich weiß, hat man innerhalb eines Objects ja keinen Zugriff auf Variablen etc., die außerhalb dieser deklariert wurden.

Gruß Mario

Geändert von GELight (15-05-2008 um 23:02 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 15-05-2008, 23:19
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Du erzeugst ein Objekt am Anfang des Skripts. Im Konstruktor wird die Verbindung hergestellt und als Variable im Objekt gespeichert ($this->connection o.ä.). Die Query-Funktion greift dann auf die offene Verbindung wieder zu. Am Ende wird die Verbindung wieder geschlossen.
Mit Zitat antworten
  #7 (permalink)  
Alt 15-05-2008, 23:23
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard

hi,

also ich öffne auch nur die verbindung, meist in einer config.php die in sowieso in jeder datei mit include/require hole .. und lasse diese verbindung einfach offen ... damit hatte ich bis jetzt die wenigsten problem.

wenn du dich entschließen soltlest die verbindung offen zu lassen, erstelle dir eien datei .. binde sie mit include oder require ein und bearbeite die klasse so, das dort drinne KEINE verbindung mehr geöffnet und geschlossen wird.

gruß
uzu
__________________
Gruß
Uzu

private Homepage
Mit Zitat antworten
  #8 (permalink)  
Alt 15-05-2008, 23:34
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard [MSSQL] DB Verbindung

@ pekka

Genau so, wie du beschreibst, mache ich es ja auch bislang in meiner Klasse. Das heißt aber auch, dass die DB Verbindung nur innerhalb dieses Objects besteht.

Ich müsste sie aber irgendwo außerhalb so deklarieren, dass ich dann mit meinen Objecten wieder Zugriff habe.

@UzumakiNaruto

Wie kann ich innerhalb meines Objects auf die verbindung zugreifen ( nutzen ) welche ich außerhalb erzeuge?

Gruß Mario

NACHTRAG:
Ich hab eben einen Blitzgedanken gehabt, der für den heutigen Abend aber zu heftig ist zum durchdenken. Ich könnte ja mit Vererbung arbeiten oder spricht was dagegen?
Ich erzeuge mit einer neuen Klasse nur die Verbindung und vererbe diese einfach an mein bisherigen DB Object( Klasse ) .... somit sollte das doch bestimmt irgendwie machbar sein... hehe

Geändert von GELight (15-05-2008 um 23:42 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 15-05-2008, 23:48
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Selbst ganz am Ende des Scripts muss sie nicht geschlossen werden. Das macht PHP automatisch.
... und wenn irgendwann die PHP-Entwickler der Meinung sind, dass es sauber/sinvoller wäre, die Verbindung von PHP-Code schliessen zu lassen und nicht vom Parser, dann schmieren die Webserver nacheinander ab oder wie?

Ich schliesse jede DB-Verbindung sofort, wenn ich weiss, dass sie nicht mehr in weiteren Schritten benötigt wird, koste es was es wolle, aber das ist sauberer und sicherer. Wielange braucht das System, um eine Verbindung zu schliessen? So dass man darauf verzichten kann/muss?
Mit Zitat antworten
  #10 (permalink)  
Alt 16-05-2008, 00:06
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Original geschrieben von asp2php
... und wenn irgendwann die PHP-Entwickler der Meinung sind, dass es sauber/sinvoller wäre, die Verbindung von PHP-Code schliessen zu lassen und nicht vom Parser, dann schmieren die Webserver nacheinander ab oder wie?
Davon abgesehen, dass das ziemlicher Unsinn wäre und deshalb niemals so kommen wird, könnte man sich vorübergehend mit ini.auto_append_file bzw. ini.auto_prepend_file + register_shutdown_function() helfen.

@Topic: Stichworte Singleton, static.
Mit Zitat antworten
  #11 (permalink)  
Alt 16-05-2008, 00:22
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von onemorenerd
Davon abgesehen, dass das ziemlicher Unsinn wäre und deshalb niemals so kommen wird, könnte man sich vorübergehend mit ini.auto_append_file bzw. ini.auto_prepend_file + register_shutdown_function() helfen.

@Topic: Stichworte Singleton, static.
Warum ist das unsinnig ... Wenn du normale Application entwickelst, musst du spätestens beim Beenden des Programms alle Verbindungen schliessen, warum auch nicht bei WebApps? IMHO es gehört einfach zum guten, sauberen Programmierstil.
Mit Zitat antworten
  #12 (permalink)  
Alt 16-05-2008, 00:48
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Das war wohl mißverständlich. Ich meinte es wäre unsinnig, wenn die PHP-Entwickler irgendwann beschließen würden, vom Programmierer das aktive Schließen aller offenen Verbindungen zu fordern.

Ein PHP-Script ist nun mal keine Applikation. Man muss sich um die Speicherallokation keine Gedanken machen und eben auch am Scriptende nicht aufräumen.
Ich finde es absolut "sauber" auf mysql_close() zu verzichten, wenn dazu schon im Manual steht "Using mysql_close() isn't usually necessary".
Mit Zitat antworten
  #13 (permalink)  
Alt 16-05-2008, 11:59
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard Re: [MSSQL] DB Verbindung

Zitat:
Original geschrieben von GELight


@UzumakiNaruto

Wie kann ich innerhalb meines Objects auf die verbindung zugreifen ( nutzen ) welche ich außerhalb erzeuge?
config.php
PHP-Code:
$conn mysql_connect($db_server$db_user$db_pass) or die ("Kommte den DB-Server nicht finden "mysql_error());
        
mysql_select_db($db_name$conn) or die("Konnte die Datenbank nicht finden "mysql_error()); 
script.php
PHP-Code:
include ("class.sql.php");
# object erzeugen
# sql statement abgeben .. OHNE identifier für die mysql-sitzung
# fertig 
class.sql.php
PHP-Code:
# functionen um den select abzugeben
# und weitere funktionen 
so in etwa könnte man dieses problem angehen

gruß
uzu
__________________
Gruß
Uzu

private Homepage
Mit Zitat antworten
  #14 (permalink)  
Alt 16-05-2008, 12:07
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von onemorenerd
Das war wohl mißverständlich. Ich meinte es wäre unsinnig, wenn die PHP-Entwickler irgendwann beschließen würden, vom Programmierer das aktive Schließen aller offenen Verbindungen zu fordern.
und genau da sehe ich nicht ein, dass es unsinnig wäre.
Zitat:
Ein PHP-Script ist nun mal keine Applikation. Man muss sich um die Speicherallokation keine Gedanken machen und eben auch am Scriptende nicht aufräumen.
es mag sein, aber es gehört nunmal dazu, sauber und konsequent aufzuräumen.
Zitat:
Ich finde es absolut "sauber" auf mysql_close() zu verzichten, wenn dazu schon im Manual steht "Using mysql_close() isn't usually necessary".
es steht z.Z. so drin, weil der Parser die Drecksarbeit für den Programmieren übernimmt, aber wenn mal ein Programmierer eine permanente Connection öffnet und vergisst sie zu schliessen, weil er schon immer "so" arbeitet, könnte's schon unangenehm werden.
Mit Zitat antworten
  #15 (permalink)  
Alt 16-05-2008, 15:08
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Original geschrieben von asp2php
und genau da sehe ich nicht ein, dass es unsinnig wäre.
Es wäre Unsinn, weil die PHP-Entwickler damit vom Programmierer etwas erzwingen wollen würden, was die PHP-Umgebung gar nicht durchsetzen kann. Was soll sie denn machen, wenn ich so ein Script schreibe:

mysql_connect(...);
exit;

Der Parser kann das nicht abfangen. Das Script läuft also erstmal durch. Am Ende kann es mir einen Runtime Error hinterherwerfen. Wenn man den unterdrückt, macht es keinen Unterschied.
Anderes Beispiel: Ich habe eine Verbindung aufgebaut und irgendwo bricht mein Script ab (könnte auch user-abort sein).

mysql_connect(...);
raiseRuntimeError();

In diesem Fall muss die PHP-Umgebung sowieso das Cleanup übernehmen.
Wenn man all das (und noch mehr?) betrachtet, könnten die Entwickler uns nur dazu zwingen, wenn sie den Parser so umfrickeln, dass man in jedem Script eine Schutdown Function registriert, die auf jeden Fall mysql_close(), mssql_close() und alle anderen denkbaren Cleanup Methoden aufruft. Genau das macht der Interpreter zur Zeit selbst und dadurch ist es viel effizienter implementiert.

Zitat:
es mag sein, aber es gehört nunmal dazu, sauber und konsequent aufzuräumen.
FACK. Aber es gehört auch dazu, seine Umgebung zu kennen. Und die PHP-Umgebung bietet nun mal dieses "Feature" DB-Verbindungen zu schließen. Da gibt es also nichts aufzuräumen. Wenn du mysql_close() am Scriptende rufst, verbrätst du nur etwas Zeit für Function Call und Execution. Der Interpreter wird dennoch schauen, ob er noch Verbindungen schließen muss.

Wenn es ein malloc geben würde, man es aber nicht verwendet müsste, würdest du es tun? Ich nicht. Wenn die Umgebung etwas built-in mitbringt, verlasse ich mich darauf und freue mich über die so gewonnene Effizienz.

Zitat:
es steht z.Z. so drin, weil der Parser die Drecksarbeit für den Programmieren übernimmt, aber wenn mal ein Programmierer eine permanente Connection öffnet und vergisst sie zu schliessen, weil er schon immer "so" arbeitet, könnte's schon unangenehm werden.
Das ist etwas anderes. Wenn man mit persistenten DB-Verbindungen arbeitet, muss man sie bei Bedarf schließen. Das macht man allerdings dann sowieso nicht in jedem Script. Sonst bräuchte man ja keine Persistenz.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

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 are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:47 Uhr.