note 86290 deleted from function.mysql-query by danbrown
| From: | danbrown@php.net | Date: | Sat, 11 Oct 2008 11:50:31 +0000 |
| Subject: | note 86290 deleted from function.mysql-query by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-145270@lists.php.net to get a copy of this message | ||
Note Submitter: Mark Herrmann
Reason: non-english
----
Problem:
- Lese mehrfach beliebige Daten aus verschiedenen Tabellen mit unterschiedlichen Datenstrukturen
(Konfig, Listen, etc.)
- Vermeidung von Redundanzen (diverse Funktionen die Daten aus Tabellen lesen jeweils auf die
Tabelle angepasste Strukturen, Abfragen etc.)
Lösung:
- "EINE" universell einsetzbar Funktion, die meine Daten in Form eines Arrays zurück
gibt
Die EINE Funktion wird wie folgt aufgerufen:
$content = read_value_from_db("close", $db, $db_server, $db_name, $db_pass,
"ch_config", "id, searchkey, content_varchar, content_bigint, content_decimal,
description", "id");
"close/open" legt fest ob die Verbindung zur DB geschlossen wird oder offen bleiben soll.
(Bei vielen Abfragen auf einer Seite schlieÃt erst die letze die Verbindung)
$db, $db_server, $db_name, $db_pass sind die vorher global festgelegten Parameter deiner Datenbank
(die brauchst Du sonst ja auch)
"ch_config" ist in diesem Beispiel der Name meiner Konfigurationstabelle, die momentan
ausgelesen werden soll
"id, searchkey, content_varchar, content_bigint, content_decimal, description" diese
Felder der Tabelle sollen ausgelesen werden
"id" dies ist der Sortierschlüssel für die aktuelle Abfrage
Die Daten werden anschlieÃend wie folgt weiterverarbeitet: (liegen ja in einem Array namens
$content):
$content_size = $content[arraysize][0]; ... ist für jede Abfrage standartmässig vorhanden und
gibt die Anzahl der Datensätze (Zeilen) zurück, die gelesen wurden
Die Daten selbst sind im Array wie folgt angeordnet:
Array[schlüssel][zähler]
...schlüssel = die feldnamen deiner tabelle, die du abgefragt hast (id, searchkey,
content_varchar, content_bigint, content_decimal, description)
...zähler = ist die aktuelle Zeilennummer der Abfrage beginnend bei 0 bis Anzahl der gefundenen
Datensätze
Entweder ich spreche das Feld direkt an:
Bsp. echo $content['searchkey'][1] ... dies zeigt mir das erste gefundene Vorkommen meiner
Abfrage Inhalt des Feldes "Searchkey"
oder eleganter ich lasse alles anzeigen in einer Schleife (zur Erinnung die Anzahl der gefundenen
Daten steht immer in $content[arraysize][0]
for ($zreg = 0; $zreg <= $content[arraysize][0]; $zreg++) {
echo $content['id'][$zreg]
echo $content['searchkey'][$zreg]
echo $content['content_varchar'][$zreg]
...
bis
echo $content['description'][$zreg]
}
Zum Schluss noch der Quellcode für die EINE Funktion, die das auslesen der Daten übernimmt:
function read_value_from_db($db_endstate, $db, $db_server, $db_name, $db_pass, $var_database,
$var_items, $var_order) {
// diese Funktion liest Daten aus einer Datenbank
$ausgabe = "";
$items = explode(', ', $var_items);
$zreg = 0; $zreg2 = 0;
$dbh = mysql_connect($db_server, $db_name, $db_pass);
$query = "use " . $db;
if (!mysql_query($query, $dbh)) die("Datenbank existiert nicht.n");
$anfrage = "SELECT " . $var_items . " FROM " . $var_database . " ORDER BY
" . $var_order;
$inhalt = mysql_query($anfrage);
while($zeile=mysql_fetch_row($inhalt)) {
$ausgabe['arraysize'][0] = $zreg;
for ($zreg2 = 0; $zreg2 < count($items); $zreg2++) { $ausgabe[$items[$zreg2]][$zreg] =
$zeile[$zreg2]; }
$zreg++;
}
if ($db_endstate != "open") { if ($closecfg == "close") { mysql_close(); } }
else { $num_rows = "variable open/close zum funktionsaufruf fehlt"; }
return $ausgabe;
} // *** end function ***