Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: sqlmanager - eierlegende wollmilchsau
AUTOR BEITRAG
‹• ⊂⌈α⊂κ¥ •›

RANG Deckschrubber

#1 - 14.03 13:31

Hi leute, ich mache mir schon seit wochen, wenn nicht sogar monaten gedanken, wie ich eine sql klasse realisiere. Hierzu habe ich schon viel durchprobiert und hoffe von euch noch paar tips zu bekommen.

Also:
ich plane eine sql klasse zu bauen (sqlmanager), der beispielsweise folgende funktionalität bieten soll:

$sqlmanager->insert($object);

wie man sieht, möchte ich einfach eine insert methode haben, der ich nur ein objekt übergebe. Dieses objekt soll dann in die entsprechende tabelle in der datenbank geschrieben werden.
Die methode intern sollte dann etwa so arbeiten:

public function insert($object){
// Erst checken ob das object den tabellennamen beeinhaltet
if(!$object->tablename)
return -1;

// Nun die spaltennamen der tabelle auslesen
$spalten[] = ....

// SQL zusammen bauen
$sql = "INSERT INTO ".$object->tablename." (";

// Jetzt, nachdem die spaltennamen bekannt sind, einfach durchgehen
for($i=0; $i<count($spalten); $i++){
// Erstmal nur die spaltennamen
if($i < count($spalten))
$sql .= $spalten[$i].", ";
else
$sql .= $spalten[$i].") VALUES (";

// Die inhalte zusammenwurschteln
if($i < count($spalten))
$sql2 .= "'".$object->$spalten[$i]."', ";
else
$sql2 .= "'".$object->$spalten[$i].")";
}

$sql .= $sql2; // Zusammensetzen

return $this->query($sql); // Aufrufen der query methode und rückgabe des ergebnisses
}

Ok, so habe ich mir das vorgestellt. Nicht wegen fehlern meckern, hab das grad ausm kopf gesaugt.

Was haltet ihr von dieser vorgehensweise?
Mein übergebenes Objekt muss natürlich die eigenschaften "tablename" und die ganzen spalten beeinhalten.

Wäre für alle (guten) Ideen sehr dankbar :)
horst

RANG Prophet of Clanintern

#2 - 14.03 16:29

1. Frage: Willst du das bauen, weil du es bauen willst oder weil du es nutzen willst?

2. Frage: Gibt es im 2. Fall nicht schon etwas bestehendes, stabiles, etc ?
‹• ⊂⌈α⊂κ¥ •›

RANG Deckschrubber

#3 - 14.03 18:20

ich möchte es bauen, weil a) lerneffekt und b) möchte ich es verwenden :)

edit:
achso, und ich weiß dass es sowas sicherlich schon gibt, nur möcht ich es doch gern selbst machen
‹• ⊂⌈α⊂κ¥ •›

RANG Deckschrubber

#4 - 16.03 07:40

hat keiner mehr nen vorschlag? schade...
horst

RANG Prophet of Clanintern

#5 - 16.03 07:50

Wenn du das INSERT Statement richtig baust, dann brauchst du nicht alle Spalten übergeben, sondern nur die, in die Werte eingefügt werden sollen. Der Rest kann ja mit Default Werten der mySQL Datenbank belegt werden (sofern du die in der Tabellendefinition angegeben hast).

Ansonsten: Ganz nette Idee. Aber ob ich mir jetzt jedes Mal das Objekt zusammenbaue oder schnell den Query hinschreibe... naja.

Okay.. Wenn du noch Logging etc mit in den SQL-Manager tust, dann hat er evtl einen gewissen Mehrwert
‹• ⊂⌈α⊂κ¥ •›

RANG Deckschrubber

#6 - 16.03 11:35

genau so hab ich mir das gedacht. der sqlmanager soll nachher auch für andere projekte genutzt werden.

vielleicht könntest du mir nen tipp geben, wie ich das mit den spalten mache? Habe bereits mit mysql_field_name oder so ähnlich rumprobiert, aber das lief nicht wie ich wollte. bin nun den dreckigen weg gegangen und implementiere die spaltennamen als array im jeweiligen objekt, damit die sql klasse diese dann auswerten kann.
horst

RANG Prophet of Clanintern

#7 - 16.03 15:19

Naja die Funktion ist schon die richtige. Wenn du aber nur ein Subset der Werte benutzen willst und den Rest mit Default-Werten übergeben möchtest, brauchst du sowieso das irgendwie in deinem "objekt".

Ich habe ja schon eingangs gesagt, dass ich das nicht soooo toll finde
‹• ⊂⌈α⊂κ¥ •›

RANG Deckschrubber

#8 - 16.03 15:52

kannst du auch begründen wieso du das nicht so toll findest?
horst

RANG Prophet of Clanintern

#9 - 18.03 21:57

Logging kann ich auch haben, ohne dass das Objekt "alles kann". Bei PHP hau ich lieber nen SQL in eine benutzerdefinierte Funktion, dann kann die nebenbei loggen und ich hab die Flexibilität SQL zu benutzen, wie ich mag und bin nicht an das statische Interface von meiner "eierlegenden Wollmilchsau" gebunden.

Das meintei ch mit "nicht soooo toll finden". Hatte nichts mit mysql_field_name oder ähnlichem zu tun.

Natürlich habe ich nichts gegen Abstraktion und Vereinfachen. Im Java spiele ich gerade mit JPA rum. Eigentlich ein sehr cooler O/R Ansatz, wenn er funktioniert. Aber da benutze ich auch lieber etwas, was es gibt und was von Experten durchdacht ist, als mir mein eigenes FW zu basteln