php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.03.2007, 10:16  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard vorteil von db klasse gegenüber normaler sql abfrage

hi leute. ich kann es einfach nicht kapieren... was genau ist denn der vorteil zum beispiel der pear db klasse gegenüber einer normalen mysql abfrage.
Code:
$res =& $db->query('SELECT * FROM phptest');
echo $res->numRows();
vs.
Code:
$res = mysql_query('SELECT * FROM phptest');
echo mysql_num_rows($res);
ich verstehe es einfach nicht?! falls es um die gegebenenfalls zurückgegebene fehlermeldung geht: ich habe zum beispiel funktionen ausgelagert die mir im fehlerfalle die fehlermeldung zurückgeben:
Code:
function MY_mysql_query($var) {
  $query=mysql_query($var) or die(mysql_error());
  return $var;
}
__________________
mfg Alexander Haim
Promaetheus ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 10.03.2007, 10:59  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Och, ... OO-Fans nehmen halt gerne Klassen. Die finden das einfach super sexy.

Ob die im Einzelfall sinnvoll und besser sind als eine Lösung ohne Klassen wird nicht immer hinterfragt.

Den riesen Vorteil einer DB-Klasse hab ich bisher auch nicht erkannt.


Deine Funktion MY_mysql_query sollte aber lieber $query zurückgeben und nicht den QueryString. Du hast vermutlich in den ersten beiden Zeilen die Namen vertauscht.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 10.03.2007, 11:13  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

genau. meine db_functions.php schaut so aus:
(die konstanten sind in der configure.php definiert)
PHP-Code:
<?php
  
function MY_db_connect() {
    
$conn mysql_connect(DB_SERVERDB_SERVER_USERNAMEDB_SERVER_PASSWORD) or die("[b]<font color=\"#FF0000\">Keine Verbindung möglich:</font>[/b]
"
.mysql_error());
    if(
$connmysql_select_db(DB_DATABASE) or die("[b]<font color=\"#FF0000\">Datenbankfehler:</font>[/b]
"
.mysql_error());
  }

  function 
MY_mysql_query($query) {
    
$ret mysql_query($sql) or die("[b]<font color=\"#FF0000\">Datenbankfehler:</font>[/b]
"
.mysql_error());
    return 
$ret;
  }
?>
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 10.03.2007, 11:18  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Das sieht jetzt aber auch net besser aus.
Wo soll den $sql herkommen, wenn Du $query übergibst???

Versuch nicht, irgendwas aus dem Kopf schnell hinzutippern. Da kommt meist Mist raus. Nimm das Original und zeig uns was mit Copy&Paste!
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 10.03.2007, 11:26  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Nachtrag:

Ich könnte mir schon einen Sinn einer DB-Klasse vorstellen. Insbesondere wenn darin die Verbindung zum Server oder der Datenbank gespeichert würde.
Dann könnte man 2 Objekte haben, mit denen man auf 2 unterschiedliche DBs zugreifen kann.

Das wäre mal so ein Einsatzbereich für mysql_db_query innerhalb der Klasse, das allerdings ja nicht mehr verwendet werden soll.

Alternativ könnte man sich in der Klasse die DB merken und jedesmal ein select_db aufrufen.

Damit das aber nicht vollkommen sinnlos vor jedem Aufruf für die gleiche DB gemacht wird, bräuchte man noch eine Variable, wo die zuletzt verwendete DB gespeichert wird. Die müsste dann von allen Objekten dieses Typs angesprochen werden können.
Naja, das kommt vermutlich reichlich selten vor. Aber da hätte die Klasse einen Vorteil.

Eine einfache Funktion, die auf 2 globale Variablen zugreift, wäre allerdings genauso hilfreich.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 10.03.2007, 11:30  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

sorry. hasse c&p. aber ok... hier... ist wahrscheinlich besser da ich anscheinend nicht mehr tippen/denken kann.
PHP-Code:
<?php

/*
  $Id: db_func.php,v 1.0 21.01.2004 18:58:32$
*/

  
function my_db_connect() {
    
$conn mysql_connect(DB_SERVERDB_SERVER_USERNAMEDB_SERVER_PASSWORD) or die("[b]<font color=\"#FF0000\">Keine Verbindung möglich:</font>[/b]
"
.mysql_error());
    if(
$connmysql_select_db(DB_DATABASE) or die("[b]<font color=\"#FF0000\">Datenbankfehler:</font>[/b]
"
.mysql_error());
  }

  function 
my_mysql_query($query) {
    
$ret mysql_query($query) or die("[b]<font color=\"#FF0000\">Datenbankfehler:</font>[/b]
"
.mysql_error());
    return 
$ret;
  }

?>
ich verwende immer nur 1 db, deshalb komme ich mit meinen funktionen auch gut aus.
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 10.03.2007, 14:30  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Also der Vorteil den ich dabei sehe ist zum einen dass du ohne im Code groß rumzupfuschen musst dein Datenbanksystem ändern kannst. Du kannst die Klasse schnell umschreiben indem du eben anstatt den mysql Funktionen die oracle oder was weiß ich für Funktionen verwendest. Somit wäre dein ganzer Code etwas flexibler was dieses Thema angeht! Du musst eben nich immer dein ganzes Skript ändern sondern nur jeweils einmal die Funktion in der DB Klasse! Außerdem wie schon erwähnt ist es wesentlich einfacher mehrere Connections aufzubauen. Man muss dann nicht immer des Datenbankhandle durch den ganzen Skript mitziehen.

Auch ist Debugging etwas leichter ... wenn ich keine Klasse hätte müsste ich immer den ganzen Teil hinter das mysql_query() schreiben was allerdings den ganzen Code sowas von aufblähen würde. Außerdem habe ich mir so kleine praktische Dinge dazugecodet wie z.b.

$db->query($query, $display_query = 0); wenn ich nu im Skript einfach als zweiten Parameter optional ne 1 mitgebe wird mir der Query ausgegeben ... so muss ich nich immer erst echo $sql; und so nen Schmarn ins Skript schrieben.
Flor1an ist offline  
Alt 10.03.2007, 14:40  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

bezüglich des änderns des codes ist das mit den ausgelagerten funktionen ja identisch möglich. auch hab ich das debugging ja in der ausgelagerten funktion. der grund bezüglich des zusatzfeatures mit 1 den sql code auszugeben ist super. da hast du absolut recht und das leuchtet mir ein.

umständlicher finde ich es hingegen dass ich im code immer erst die klasse aufrufen muss wenn ich eine simple query durchführen möchte, sprich ein neues objekt erzeugen muss.
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 10.03.2007, 14:47  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Ich finds allerdings einfacher ne Klasse aufzurufen anstatt erstmal mysql_connect() und dann noch mysql_select_db() aufzurufen ... ich habs so gelöst dass ich beim aufrufen der Klasse direkt die Zugangsdaten übergebe ... und erst wenn der erste Query gesendet wird verbindet sich das Skript zur Datenbank! D.h. wenn ein Skirpt mal läuft ohne dass ein Query aufgerufen wird wird auch nicht zur Datenbank connected. Spart halt vlt. nen bissl Performance ... bzw. wenns nich nötig is eine Verbindung zur DB zu erstellen dann muss man ja auch keine machen

Die Sache mit einzelnen Funktionen ist halt einfach dass du keinen abgeschotteten Variablenraum hast. Du kannst nicht ohne weiteres den Connectenhandle zwischen den Funktionen hin und hergeben ... dann müsstest du wieder mit global arbeiten und das wäre dann schon wieder nicht sauber. Daher find ichs bei Datenbanken wesentlich schöner mit einer Klasse zu arbeiten.

Ich bin jetzt auch nicht der Typ der gern alles in Klassen und sowas hat. Ich verwende sowieso nur sehr wenige Klassen ... für alles andere brauch ich die net.
Flor1an ist offline  
Alt 10.03.2007, 16:05  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

also ich hab bei meinen skripten in der application_top.php den funktionsaufruf db_connect() (aus obiger functions.php) und in der application_bottom.php db_disconnect(). somit brauche ich in den skripten nur mehr my_mysql_query aufrufen usw. wie machst du das mit deiner klasse? wenn du $x = new query($sql); aufrufst verbindet sich das skript erst zum server? dann musst du aber manuell closen oder?
__________________
mfg Alexander Haim
Promaetheus 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
Variable aus Klasse herausbekommen GSJLink PHP Tipps 2008 7 16.02.2008 22:25
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
mehr als eine Klasse einbinden Alpha Centauri PHP-Fortgeschrittene 4 13.04.2006 20:56
Abfrage: Klasse bereits includiert? becks123 PHP-Fortgeschrittene 24 16.12.2005 18:21
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12
Rückgabewert auf einer Klasse anders als in der Klasse micbur PHP Tipps 2005-2 6 10.06.2005 15:06
[Erledigt] IF() abfrage in variable packen PHP Tipps 2005 14 01.04.2005 17:23
[Erledigt] Mysql Abfrage Problem! PHP-Fortgeschrittene 5 27.11.2004 10:22
Klasse ändern UniQ PHP Tipps 2004 5 24.08.2004 14:46
Abfrage aus DB noch mal ausgeben und Abfrage aus mehrern Tab PHP Tipps 2004 4 12.07.2004 15:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
datenbank klasse für abfrage, php vorteil db klasse, sql abfrage in klassen, php vorteile einer sql klasse, sql klasse, query klasse php, vorteil erste klasse db

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