2011-01-06 18 views
1

Ich entwickle in PHP und MySQL.Ansatz zum Daten Wrapping

Die Informationen über den aktuell angemeldeten Benutzer werden in vielen verschiedenen Tabellen gespeichert. Die Informationen, die ich auf jeder Seite benötige, lade ich vor. Allerdings, wenn etwas von einem selten zugegriffen Tisch benötigt wird - dann mache ich

$newdata = $db->Query('SELECT * FROM rare_table WHERE user_id='.$user->id); 

Ich mag würde die oben bis zu einem Punkt vereinfachen, wo ich muß nicht angeben, dass die Abfrage auf diesen bestimmten Benutzer beschränkt werden soll. Ein idealer Funktionsaufruf wäre:

Offensichtlich müsste ich die SQL analysieren und eine WHERE-Klausel hinzufügen. Oder fügen Sie der bereits vorhandenen Klausel hinzu.

Fragen: Gibt es Tools, dies zu tun? Wie kann ich das entwickeln? Ist das überhaupt eine gute Idee?


bearbeiten: eine SQL parser gefunden, die Interessenten an tun dies helfen kann.

+0

zusätzlich können Sie einzelne Zeile Ergebnis Abfragen begrenzen wollen. SELECT * FROM Tabelle WHERE ID = x LIMIT 1 – dqhendricks

+0

@dqhendricks Bei Abfragen, bei denen eine 'WHERE'-Klausel für einen primären oder eindeutigen Schlüssel vorhanden ist, wird das Hinzufügen einer 'LIMIT 1' die Abfrage verlangsamen, da die Anzahl der Zeilen protokolliert wird. – Mikhail

+0

Brummen gut zu wissen. – dqhendricks

Antwort

0

Sieht aus wie Sie eine Funktion Benutzer

public function getRow($tableName) 
{ 
    $sql = "SELECT * FROM $tableName WHERE user_id = " . $this->$id; 
    //run query 

Das Problem wird immer $ db hinzufügen möchten, ist es zu Benutzer gehören? Hast du eine Funktion, um es zu bekommen?

public function getRowFrom($tableName) 
{ 
    $sql = "SELECT * FROM $tableName WHERE user_id = " . $this->$id; 
    $db = getDb(); //however you need to do this. $this->db, DBTools::getDB(), call constructor here, etc. 
    return $db->Query($sql); 
} 

und nennen es als

$user->getRowFrom('rareTableNo4'); 
+0

Was ist mit anderen SQL-Funktionen wie "LIMIT", "ORDER BY", "GROUP BY" usw.? nach der WHERE-Klausel? – Mikhail

+0

guter Punkt. Was ist Ihr DB-Objekt? wenn es 'mysqli' oder' PDO' verwendet, denke ich, dass es eingebaute Möglichkeiten zur Parametrisierung gibt. Sonst, wenn Sie spezifische beteiligte Anfragen machen, was ist der Benutzer, der '' user_id = {$ user-> id} '' außerhalb der Klausel speichert? wäre wahrscheinlich sinnvoller, die häufig verwendeten Abfragen in Benutzerfunktionen zu schreiben, zB - 'getAttribute ($ attName)', 'getCreatedTime()', und do –

0

Ich generiere normalerweise eine Klasse namens User und instantiiert einen Singleton für jede Seite (mit dem angemeldeten Benutzer). Zusätzliche Instanzen können für andere Benutzer erstellt werden (z. B. $ u2 = neuer Benutzer ($ name);) Dann werden solche Dinge in Benutzer eingebettet.

+0

Das ist nicht wirklich meine Frage. Ich habe eine Klasse genau wie du es beschreibst. Meine Frage betrifft die Umwandlung von SQL-Anweisungen, so dass ich nicht angeben muss, dass ich nach Daten dieses Benutzers frage. – Mikhail

Verwandte Themen