Ich habe ein altes Projekt bekam die Daten, die diese dumme Art und Weise holen:PHP SQL Query Builder ohne DB-Verbindung
$db = new Database($server, $name, $pass);
$where = 'country = "UK"';
if ($_GET['gender']) { $where .= ' AND gender = "' . $_GET['gender'] . '"'; }
$sql = "SELECT * FROM users WHERE $where ORDER BY name";
$users = $db->fetchAll($sql);
Ich möchte es mit einem SQL-Builder verbessern (bei anderen Projekten verwende ich DB-Tabellen Zend), aber das Problem ist, ich muss die Database
Klasse behalten, weil es fetch*()
Methoden mehr als nur das Laden von Daten (zB Debugging, Leistung, Statistiken, etc.) ist.
Ich habe bei Zend_Db_Table
sehe und this post aber all diese Abfrage Bauherren an einen DB-Stecker angebracht mit eigenen fetch()
oder execute()
Methoden. Aber ich würde einen Builder benötigen, die nur SQL-Abfrage erstellt, die in den bestehenden Verfahren verwendet werden können:
$query = new MySqlQuery();
$query
->select('*')
->from('users')
->orderBy('name')
->where('country', 'UK');
if ($_GET['gender']) {
$query->where('gender', $_GET['gender']);
}
$sql = $query->toString();
$db = new Database($server, $name, $pass);
$users = $db->fetchAll($sql);
ich einfach dachte, die Zend Klassen stehlen und Umschreiben sie, damit sie die DB-Verbindung nicht benötigen, aber ich würde gerne sehen, ob das schon etwas erledigt ist.
Konnte nicht Ihre 'Database' Klasse die Zend_Db_Table Klasse erben, die Methode für' fetchAll' überschreiben, aber immer noch den übergeordneten 'fetch' aufrufen (in diesem Fall' Zend_Db_Table :: fetch'), um die Daten zu erhalten? __NB__ - Ich benutze ZendFrameworks nicht, also ist das reine Spekulation. Raten Arbeit und "Finger in der Luft" Glück – DaveyBoy
@DaveyBoy Leider Teile des Projekts sind nicht-OOP (die SQL-Abfrage), während andere OOP so übermäßig sind, so ist der Vererbungsbaum der 'Datenbank'' Database' <- 'BaseDatabase '<-' CustomDb' <- 'BaseDb' <-' AbstractDb' <- 'BaseObject' <-' AbstractObject' und es wäre sehr schwer von etwas anderem zu erben. Also muss die 'Database' _as is_ bleiben, weil ich keine Zeit habe sie komplett neu zu schreiben. –