 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
26.11.2003, 09:07
|
#1
|
|
TP-Insider
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
|
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->query) mysql_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!
|
|
|
26.11.2003, 09:11
|
#2
|
|
TP-Insider
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
|
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!
|
|
|
26.11.2003, 15:57
|
#3
|
|
TP-Senior
Registriert seit: Aug 2003
Ort: Kaiserslautern
|
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. 
|
|
|
26.11.2003, 16:02
|
#4
|
|
TP-Senior
Registriert seit: Aug 2003
Ort: Kaiserslautern
|
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.
|
|
|
27.11.2003, 11:41
|
#5
|
|
TP-Insider
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
|
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).
|
|
|
27.11.2003, 22:01
|
#6
|
|
TP-Senior
Registriert seit: Aug 2003
Ort: Kaiserslautern
|
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 ...
|
|
|
30.11.2003, 10:18
|
#7
|
|
TP-Insider
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
|
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!
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| 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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 05:55 Uhr.
|
 |