Autor |
Datenbank auslesen |
Gast
Unregistrierter Benutzer
|
Geschrieben: 17.01.2007 23:34
Hi,
ich habe eine Tabelle in meiner Datenbank angelegt und möchte nun OPN-Funktionen verwenden, um diese auszulesen.
Unter PHPNuke machte ich das so:
1) Query definieren (=Stringzuweisung)
2) Query durchführen: $res = sql_query($q,$dbi);
3) Resultset in einer Schleife auslesen (in diesem Beispiel zwei Felder):
while(list($Frequenz, $Anzahl)= sql_fetch_row($res,$dbi))
Innerhalb der Schleife waren die Felder dann mit z.B. $Frequenz oder $Anzahl anzusprechen.
Ich habe nun diese PHP-Seite nach Anypage migriert, habe aber keinen Dunst wie ich unter OPN den Zugriff machen kann (ich würde gerne die Standardfunktionen nutzen, damit ich die ganze DB-Config nicht noch einmal irgendwo anführen muss).
Ich brauche keine Arrays etc. - mir reicht ein stinknormales "Variable auslesen", um's dann gleich auf den Schirm zu schreiben.
Danke für Eure Tipps!
Boby [addsig]
|
|
stefan Beiträge:
2435
Wohnort: Münster
|
Geschrieben: 18.01.2007 05:22
Gibt mehrere Möglichkeiten
z.B.
$sql = 'SELECT id FROM ' . $opnTables['tabelle_in_opn'] . ' WHERE wert=' . $integer;
$result = $opnConfig['database']->Execute ($sql);
if ($result !== false) {
while (! $result->EOF) {
$id = $result->fields['id'];
echo $id;
$result->MoveNext ();
}
}
oder
$sql = 'SELECT id FROM ' . $opnTables['tabelle_in_opn'] . ' WHERE wert=' . $integer;
$result = $opnConfig['database']->SelectLimit ($sql, $maximal, $offset);
if ($result !== false) {
while (! $result->EOF) {
$id = $result->fields['id'];
echo $id;
$result->MoveNext ();
}
}
Gibt aber noch weitere
|
|
Gast
Unregistrierter Benutzer
|
Geschrieben: 19.01.2007 00:22
Danke vorerst für die rasche Antwort.
In meinem Beispiel möchte ich eine einfache Tabelle auslesen & ausgeben - und abhängig von dem Inhalt eines Feldes die Hintergrundfarbe der jeweiligen Zelle verändern.
Ich habe das einmal wie folgt übernommen:
echo '<TABLE border=1><TR><TD><b>Frequenz</TD><TD><b>Anzahl<BR>Belegung</b></TD></TR>';
$result = $opnConfig['database']->Execute($sql);
if ($result !== false)
{
while (! $result->EOF)
{
$Frequenz = $result->fields['Frequenz'];
$Anzahl = $result->fields['Anzahl'];
switch ($Anzahl)
{case "0": $fq_background = 'bgcolor="#33CC33"'; break;
case "1": $fq_background = 'bgcolor="#33CC33"'; break;
case "2": $fq_background = 'bgcolor="#FFFF00"'; break;
case "3": $fq_background = 'bgcolor="#FF9933"'; break;
default: $fq_background = 'bgcolor="#FF0000"';
}
echo "<TR $fq_background><TD>" . $Frequenz . "</TD><TD> " . $Anzahl . "</TD></TR>";
$result->MoveNext ();
}
echo '</TABLE>';
Auf der Seite kommt (statt jeden gelesenen Satz) folgende Meldung:
WARNING [8] Undefined index: Frequenz
FOUND IN [system/anypage/functions_center.php(104) : eval()'d code]
FOUND AT 120
WARNING [8] Undefined index: Anzahl
FOUND IN [system/anypage/functions_center.php(104) : eval()'d code]
FOUND AT 121
Was läuft da falsch?
Ciao,
Boby [addsig]
|
|
stefan Beiträge:
2435
Wohnort: Münster
|
Geschrieben: 19.01.2007 04:30
wo definierst du denn das $sql aus der zeile
$result = $opnConfig['database']->Execute($sql);
also was steht da drin in $sql
|
|
anonymous
Unregistrierter Benutzer
|
Geschrieben: 19.01.2007 14:02
Soweit ich weiss werden die assoc. Indizes immer in Kleinschreibung von der SQL Klasse erzeugt.
Von daher sind die Warnings korrekt. Da es ->fields['Frequenz'] nicht gibt aber ->fields['frequenz'].
Eine einheitliche Indexnamensgebung ist schon sinnvoll, da es bei den diversen SQL Servern verschiedene Schreibweisen gibt:
1. MySQL Kleinschreibung
2. Interbase/Firebird Grossschreibung
3. Postgres Standard Kleinschreibung, mit " gefasste Namen können gemischte Schreibweise audweisen.
Mit diesen Möglichkeiten hat man dann bei einer Anwendung wie OPN nur 2 Möglichkeiten:
1. Layer für die Wandlung von Feld- und Tabellennanmen
2. Wandlung der Namen un Gross- oder Kleinschreibung
Punkt 1 kommt IMHO nicht in Frage, da es wieder 2 Probleme gibt:
1. Speicherplatz
2. Laufzeit.
|
|
Gast
Unregistrierter Benutzer
|
Geschrieben: 19.01.2007 22:21
Stefan,
schläfst Du denn nie?
Jedenfalls Danke an alle für die Tipps - ich hab's dank Eurer Hinweise gefunden. Das Statement sah wie folgt aus:
$sql="select fq.Druckansicht, COALESCE(iv.Anzahl,0)
from ANMELDUNG_FREQUENZEN fq
LEFT OUTER JOIN
(
select FREQ_27_1 AS Frequenz, count(*) as Anzahl
from ANMELDUNG_LUNZ_2007
where FREQ_27_1 ' '
group by FREQ_27_1
UNION .......
Das hat im PHPNUKE offenbar funktioniert, weil die LIST-Funktion offenbar was Spezielles tut. Mit einer leichten Modifikation...
$sql="select fq.Druckansicht AS Frequenz, COALESCE(iv.Anzahl,0) as Anzahl
from ANMELDUNG_FREQUENZEN fq
LEFT OUTER JOIN
(
select FREQ_27_1 AS Frequenz, count(*) as Anzahl
from ANMELDUNG_LUNZ_2007
where FREQ_27_1 ' '
group by FREQ_27_1
UNION
Waren die Fehler dann weg. Der Grund ist klar: MySQL gibt die Felder unter dem Namen "Druckansicht" bzw. "COALESCE(iv.Anzahl,0)" zurück - und nicht als "Frequenz" und "Anzahl". Wenn man's weiß ist die Lösung immer einfach
Danke nochmals,
Boby [addsig]
|
|
|
sortieren nach
|