Wow, ähm ja, ich möchte mal sagen du hast das recht kompliziert gelöst 8O
Also wie gesagt du kannst entweder das Result Set oder die Resultate selbst an den Caller zurückgeben, zwischen mehreren Queries unterscheiden oder für jede Query ein Objekt erzeugen. Du kannst nicht ein und das selbe Objekt für 2 völlig unterschiedliche Queries verwenden und erwarten das die Resultate nicht durcheinander kommen.
1. Result Set zurückgeben:
Code: Select all
function query($sql_statement){
$this->sql=$sql_statement;
if(!$this->query_id=call_user_func($this->db_query,$this->sql,$this->con)){
$this->halt("Keine Verbindung zur Datenbank oder falsches Ouery");
}else{
if (!$this->query_id) {
$this->halt("Falsches SQL Query");
return false;
}else{
return true;
}
}
return false;
}
Anstatt hier nur true oder false zurückzugeben, das Resultat von
call_user_func($this->db_query,$this->sql,$this->con) zurückschicken. Dann hast du im Hauptprogramm bspw. $SQL1 und $SQL2 wie bei deinem Beispiel aus dem phpbb. Natürlich müsstest du dann get_row() und count_rows() entsprechend anpassen, damit diese ein ResultSet erwarten und dieses verarbeiten.
Siehe db/mysql4.php von phpbb2:
Code: Select all
/* Zeile 100ff:
Alte Queries löschen */
//
// Remove any pre-existing queries
//
unset($this->query_result);
/* Query ausführen */
/* Zeile 144:
Resultat der Query zurückgeben */
return $this->query_result;
2. Resultate zurückgeben
Hier könntest du eine neue Methode schreiben, die dir die Resultate bspw. in ein Array schreibt und anschliessend dieses zurückgibt. D.h. du hättest dann in deinem Hauptprogramm bspw. $result1 und $result2 als Array mit den Resultaten.
3. Mehrere Queries verwalten
Du könntest jeder Query eine ID zuordnen und damit zwischen mehreren Aufrufen unterscheiden.
Einen Member $result = array(); einführen und bei jedem Aufruf der query Methode sowas wie
Code: Select all
$this->result[] = mysql_query($query, $connection);
return count($this->result);
Dann erhälst du mit
$query = $db->query($sql); jeweils einen neuen Index, den du dann an Methoden wie get_row() oder count_rows() übergeben könntest, damit diese wissen auf welche Abfrage du dich beziehst.
4. Query Objekt
Wahrscheinlich würde ich es so, oder so ähnlich lösen (nur grober Aufbau):
Code: Select all
class Database {
function Database($host, $user, $password, $database) {
// Zur DB verbinden
return $DBHandle;
}
}
class Query {
function __construct($sql_statement, $database) {
$this->SQL = $sql_statement
$this->Database = $database;
}
function execute() {
$this->Result = mysql_query($this->SQL, $this->Database);
}
function getRow() {
return mysql_fetch_array($this->Result);
}
}
Dein Code könnte dann bspw. so aussehen:
Code: Select all
$DB = new Database('localhost', 'luser', 'l33t', 'sampleDb');
$Query1 = new Query("SELECT * FROM $db_admin ORDER BY id ASC", $DB);
$Query1->execute();
while($result = $Query1->getRow()) {
echo $result['sampleCol'];
$Query2 = new Query("SELECT * FROM $db_webface_berechtigung WHERE admin = '$result[admin]'", $DB);
$Query2->execute();
while($result2 = Query2->getRow()) {
echo $result2['serverid'];
}
}
Das Ganze ist jetzt nur schnell aus dem Kopf hingeschrieben worden, da wird noch so einiges nicht passen, aber ich hoffe du verstehst was ich meine :)
Abgesehen davon sind wir eh schon ziemlich OffTopic, sind ja kein PHP Forum hier, wenn du noch Fragen hast kannst du mir auch eine PM schicken...
.static