power-box.de
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 26.11.2003, 09:07   #1
TP-Insider
 
Benutzerbild von NicNac
 
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
NicNac macht alles soweit korrekt

MySQL Klasse Problem


Hi...hab mir jetzt ne kleine Klasse geschrieben für MySQL. Unter anderem ist auch die fetcharray() function enthalten:

PHP-Code:
function fetcharray($result){
  
$this->result mysql_fetch_array($this->query); //Von vorhin
  
return $this-result;
}

function 
freeresults(){
  if(
$this->querymysql_free_result($this-result

Mein Problem ist einfach, dass ich in einer Seite mehrere Datenbankabfragen habe und die so irgendwie "überkreuzt" ausgegeben werden. Das heisst, ich kann nicht eine Abfrage machen, das alles ausgeben, dann freeresults und die neue Abfrage weil sie sich ja überschneiden. Wie schaff ich also mit den Klassen ein individuelles Ergebnisarray, dass dennoch die Funktion freeresults nacher funzt?
Hoffe ihr versteht was ich meine...

Ich dachte vielleicht kann man das so machen:

Die Funktion ruft man so auf:
$database ist mein Handler sozusagen:

PHP-Code:
$database -> fetcharray($newestpicture); 
Da die Variable $result, also demfall $newestpicture übergeben wird, wäre es doch schön wenn die Ergebnisse im Array $newestpicture enthalten wären?! Sorry ich beschäftige mich noch nicht so lange mit Klassen darum bin ich voll verwirrt
__________________
http://www.exploreourplanet.net - Ladet eure schönsten Urlaubsbilder hoch!
NicNac ist offline   Mit Zitat antworten


Alt 26.11.2003, 09:11   #2
TP-Insider
 
Benutzerbild von NicNac
 
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
NicNac macht alles soweit korrekt
Oder ist das die Lösung, dass man für jede Datenabfrage ein eigenes Objekt erstellt?

z.B:

PHP-Code:
$newestpicture = new MySQL(); //MySQL ist meine Klasse
$oldestpicture = new MySQL(); 
Wobei in meiner Klasse auch die Verbindung zur Datenbank als Funktion enthalten ist. Müsste also ein Objekt die Datenbankverbindung regeln und jede Datenbankabfrage ein eigenes Objekt sein?
__________________
http://www.exploreourplanet.net - Ladet eure schönsten Urlaubsbilder hoch!
NicNac ist offline   Mit Zitat antworten
Alt 26.11.2003, 15:57   #3
TP-Senior
 
Registriert seit: Aug 2003
Ort: Kaiserslautern
khromium macht alles soweit korrekt
Ich verstehe die Sache mit dem Überschneiden zwar nicht ganz, aber hier mal folgende Vorschläge.

1. Es wird auf jeden Fall nur eine Instanz der Klasse erzeugt mit der alle Datenbankabfragen durchgeführt werden. (außer greifst noch auf eine andere evtuell externe Datenbank zu -> dann neue Instanz)

2. Die Klasse sollte dazu da sein die Abfragen leichter und schneller stellen zu können. Du packst lediglich die mysql_befehle in eine Funktion und rufst diese dann auf, da sehe ich keine besonderen Vorteile ^^.

3. Versuche die ganzen Zeiger (queryID, resourceID) intern in der Klasse behandeln zu lassen. Dann brauchst du nur noch mit SQL und den letzendlichen Ergebnissmengen arbeiten, was dir schonmal die dauernde Parameterübergabe im Hauptprogramm ersparrt.

4. Hier mal paar Beispiele aus meiner Klasse:

PHP-Code:
// properties

   
var $host;
   var 
$database;
   var 
$user;
   var 
$password;

   var 
$resourceId;
   var 
$queryId;
   var 
$Record;
   var 
$Row;

   var 
$debugger;

// mehtods

 
function connect() {

    if (
$this->resourceID == 0) {
     
$this->resourceID mysql_connect($this->host,$this->user,$this->password);
     if (!
$this->resourceID) {
      
$this->error(TRUE,"Sa_MySQL->connect() 'mysql_connect'","Cannot connect.");
     } else {
      if (!
mysql_select_db($this->database,$this->resourceID)) {
       
$this->error(TRUE,"Sa_MySQL->connect() 'mysql_select_db'");
      }
     }
    }

   } 
// End: function - connect

   
function query($queryStr,$mode=MYSQL_ASSOC) {

    
$this->connect();
    
$record = array();
    
$this->queryID mysql_query($queryStr,$this->resourceID);
    if (!
$this->queryID) {
     
$this->error(FALSE,"Sa_MySQL->query() 'mysql_query'",0,$queryStr);
    } else {
     
$record mysql_fetch_array($this->queryID,$mode);
    }
    if (empty(
$record)) {
     
$this->freeResult();
    } else {
     
$result $record;
     if (!
mysql_data_seek($this->queryID,0)) {
      
$this->error(FALSE,"Sa_MySQL-query() 'mysql_data_seek'","Pointer of data record could not be reseted.");
     }
    }

    return 
$record;

   } 
// End: function - query

function nextRecord($mode=MYSQL_ASSOC) {

    if (
$this->queryID) {
     
$record mysql_fetch_array($this->queryID,$mode);
     if (!
$record) {
      
$this->freeResult();
      
$result FALSE;
     } else {
      
$result $record;
     }
    } else {
     
$result FALSE;
    }

    return 
$result;

   } 
// End: function - nextRecord 
Hoffe das verwirrt dich nicht mehr als es dir letzendlich hilft.
khromium ist offline   Mit Zitat antworten
Alt 26.11.2003, 16:02   #4
TP-Senior
 
Registriert seit: Aug 2003
Ort: Kaiserslautern
khromium macht alles soweit korrekt
axo noch als Beispiel. Eine Abfrage würde dann so ablaufen:

PHP-Code:


 $mysql 
=& new MySQL();

 
$queryStr "SELECT * FROM example";

 while(
$row nextRecord($queryStr)) {
  
print_r($row);
 } 
Den Rest, also connecten abfrage und das Ergebnis holen behandelt die Klasse Intern. Siehst also das du die Sache durch den Einsatz einer Klasse wenn du sie effizient gestaltest enorm vereinfachen kannst.
khromium ist offline   Mit Zitat antworten
Alt 27.11.2003, 11:41   #5
TP-Insider
 
Benutzerbild von NicNac
 
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
NicNac macht alles soweit korrekt
Hi nochma

Hab jetzt nochmal meine Klasse (nachdem ich deine Beispiele bisserl angeguckt habe) neu gemacht. Was hälst du davon? Und ich kapier einfach oft nicht wieso man manchmal $this->... muss schreiben und in einigen Tutorials sah ich aber dennoch, dass gewisse einfach nur eine Variable $.... reingeschrieben haben..das kapier ich nicht?!?

PHP-Code:
class query {
             
 var 
$result;
 var 
$sql;
 var 
$_error;
 var 
$_errno;
 var 
$rows;
 var 
$array;
            
 function 
query($sql) {
  
$this->record = @mysql_query($sql);
  if(!
$this->record) {
   
$this->geterror();
  } else {
   return 
$record;
  }
 }
             
 function 
geterror() {
  
$this->_error mysql_error($this->record);
  
$this->_errno mysql_errno($this->record;
 }
             
 function 
numRows() {
  if(!
$this->record){
   
$this->rows = -1;
  } else {
   
$this->rows mysql_num_rows($this->record);
  }
 }
             
 function 
fetch() {
  
$result mysql_fetch_array($record);
  return 
$result;
 }
             

Ach ja, jetzt würde das ganze so aufgerufen werden:

PHP-Code:
$abfrage = new query();
while(
$row $abfrage->fetch()){
blablabla

__________________
http://www.exploreourplanet.net - Ladet eure schönsten Urlaubsbilder hoch!

Geändert von NicNac (27.11.2003 um 12:53 Uhr).
NicNac ist offline   Mit Zitat antworten
Alt 27.11.2003, 22:01   #6
TP-Senior
 
Registriert seit: Aug 2003
Ort: Kaiserslautern
khromium macht alles soweit korrekt
Also erstmal bezüglich Variablen:

$this beschreibt eine Klassenvariable, das wird auch Properties also Eigenschaft genannt. Diese Variablen werden in der Klasse deklariert und sind innerhalb der gesamten Klasse gültig. Die normalen Variablen die in den Funktionen benutzt werden sind lokale Variablen, die nur in dieser bestimmten Funktion gültig sind. Nach der Ausführung dieser einen Funktion sind sie also weg. Properties brauchst du nur wenn innerhalb der Klasse ein Wert gespeichert werden soll der eventuell auch von anderen Funktionen der Klasse verwendet werden soll, ansonsten bräuchtest du diesen Wert nur in einer lokalen Variable zu speichern, da er später ja nicht mehr gebraucht wird.

Zu deiner Klasse:

Im grunde genommen sollte die schon funktionieren und als Grundversion ist sie durchaus zu gebrauchen, habe auch nicht anders angefangen, wirst wenn du sie benutzt schon merken wo noch Verbesserungen und logisch Fehler zu beheben sind.

Dabei gehe ich davon aus, dass das nicht die gesamte Klasse ist ^^. Da fehlen noch connects und so (im Konstruktor??). Und bei deinem Aufruf fehlt auch ein QueryStr. Naja falls du noch was wissen willst ...
khromium ist offline   Mit Zitat antworten
Alt 30.11.2003, 10:18   #7
TP-Insider
 
Benutzerbild von NicNac
 
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
NicNac macht alles soweit korrekt
Hi khromium

Erstma Danke für deine Hilfe (war jetzt zwei Tage weg, sorry dass ich nicht geantwortet habe).

Ähm naja den Connect mache ich ausserhalb der Klasse, da ich den nur einmal brauche, da ich alles über eine Index und Includes regle.

Aber meine Klasse funktioniert eben nicht, das ist das Problem. Es steht immer, dass bei der Funktion fetch() irgendwie keine gültige Ergebnisresource vorhanden ist. Irgendsowas..Wieso?!
__________________
http://www.exploreourplanet.net - Ladet eure schönsten Urlaubsbilder hoch!
NicNac ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
MySQL Klasse Problem MySQL Klasse Problem
« korrekte Schreibweise | Bilderupload leichtgemacht? »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
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


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:55 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



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 62 63 64 65 66 67

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 62 63 64 65 66 67