note 86290 added to function.mysql-query
| From: | MarkHerrmann at osu1 dot php dot net | Date: | Sat, 11 Oct 2008 10:54:26 +0000 |
| Subject: | note 86290 added to function.mysql-query | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-145267@lists.php.net to get a copy of this message | ||
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 ***
----
Server IP: 217.160.72.57
Probable Submitter: 84.162.253.187
----
Manual Page -- http://www.php.net/manual/en/function.mysql-query.php
Edit -- https://master.php.net/note/edit/86290
Del: integrated -- https://master.php.net/note/delete/86290/integrated
Del: useless -- https://master.php.net/note/delete/86290/useless
Del: bad code -- https://master.php.net/note/delete/86290/bad+code
Del: spam -- https://master.php.net/note/delete/86290/spam
Del: non-english -- https://master.php.net/note/delete/86290/non-english
Del: in docs -- https://master.php.net/note/delete/86290/in+docs
Del: other reasons-- https://master.php.net/note/delete/86290
Reject -- https://master.php.net/note/reject/86290
Search -- https://master.php.net/manage/user-notes.php