Probleme beim Auslesen von Feldnamen Datenbanktabelle

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
josh
Beiträge: 156
Registriert: Do 24. Jun 2004, 09:25
Wohnort: Ahlen
Kontaktdaten:

Probleme beim Auslesen von Feldnamen Datenbanktabelle

Beitrag von josh » Do 31. Jul 2014, 19:24

Hallo,

das hat bisher funktioniert:

Code: Alles auswählen

$query = "SELECT * FROM con_meine_tabelle";
	
	$res = $db->query($query);
   $db->next_record();
	
	for ($i = 1; $i <= $db->num_fields()-1; $i++)  { 
		
		//Feldnamen auslesen
		$feldname = mysql_field_name($res, $i);
		
		echo $feldname;
		
	}
Die Anzahl der Felder bekomme ich mit $db->num_fields()

Ich habe versucht die Felder mit $db->field_name($res, $i) zu holen. Das klappt aber auch nicht.

Kann jemand weiterhelfen?

josh

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Probleme beim Auslesen von Feldnamen Datenbanktabelle

Beitrag von homtata » Do 31. Jul 2014, 22:17

Hallo Josh,

vielleicht gehts ja mit $db-f() irgendwie:

f( mixed $name, mixed $default = NULL )

Returns the desired field value from current record set.
Quelle:
http://api.contenido.org/con490/class-c ... etMetaData

josh
Beiträge: 156
Registriert: Do 24. Jun 2004, 09:25
Wohnort: Ahlen
Kontaktdaten:

Re: Probleme beim Auslesen von Feldnamen Datenbanktabelle

Beitrag von josh » Do 31. Jul 2014, 22:44

Hallo Homtata,

Es geht so:

Code: Alles auswählen

	//Feldnamen in Array schreiben und umdrehen
	$data =	$db->getMetaData( 'con_meine_tabelle', true);
	$trans = array_flip($data['meta']);
	
	$query = "SELECT * FROM con_meine_tabelle";
	$db->query($query);
	$db->next_record();

	//Feldnamen abarbeiten
	for ($i = 1; $i <= $db->num_fields()-1; $i++)  {
		
			$feldname=$trans[$i];
			echo $feldname;
			
			//...
	}

Viele Grüße aus Ahlen

josh

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Probleme beim Auslesen von Feldnamen Datenbanktabelle

Beitrag von rethus » Fr 1. Aug 2014, 19:10

Darf ich dir einen Tipp in Sachen Performance geben?

So etwas macht man nicht, wenn man performanten Code schreiben möchte:

Code: Alles auswählen

for ($i = 1; $i <= $db->num_fields()-1; $i++)  {
Bedenke, dass hier bei jedem durchlauf der FOR-Schleife die DB-Funktion gestartet werden muss. Das kann gerade bei Schleifen mit großen Datensätzen, oder bei stark frequentierten Scripten ganz schön bremsen.
Besser ist es so:

Code: Alles auswählen

$performance_booster =  $db->num_fields();
for ($i = 1; $i <= --$performance_booster; $i++)  {
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

josh
Beiträge: 156
Registriert: Do 24. Jun 2004, 09:25
Wohnort: Ahlen
Kontaktdaten:

Re: Probleme beim Auslesen von Feldnamen Datenbanktabelle

Beitrag von josh » Fr 1. Aug 2014, 19:21

Hallo rethus,

danke für den Tipp. Hab es sofort eingebaut und funktioniert.

Du hst recht, das war schon bei gw Basic so. Nur damals hat man mehr darauf geachtet.
War wohl mit Blindheit geschlagen :-)

Viele Grüße aus Ahlen

josh

Zuschauer
Beiträge: 141
Registriert: Do 5. Dez 2013, 08:57
Kontaktdaten:

Re: Probleme beim Auslesen von Feldnamen Datenbanktabelle

Beitrag von Zuschauer » Sa 2. Aug 2014, 08:50

rethus hat geschrieben:So etwas macht man nicht, wenn man performanten Code schreiben möchte:

Code: Alles auswählen

for ($i = 1; $i <= $db->num_fields()-1; $i++)  {
Besser ist es so:

Code: Alles auswählen

$performance_booster =  $db->num_fields();
for ($i = 1; $i <= --$performance_booster; $i++)  {
... wobei du hier statt "-1" "--" in der Schleife vor $performance_booster geschrieben hast, was für mein Verständnis bei jedem Schleifendurchgang dessen Wert reduziert.

Noch besser geht es allerdings so:

Code: Alles auswählen

for ($i = 1, $n = $db->num_fields(); $i < $n; $i ++) {
Das "-1" bleibt jetzt weg weil es nicht mehr "<=" heisst, sondern "<".

Gruß
Zuschauer

josh
Beiträge: 156
Registriert: Do 24. Jun 2004, 09:25
Wohnort: Ahlen
Kontaktdaten:

Re: Probleme beim Auslesen von Feldnamen Datenbanktabelle

Beitrag von josh » Sa 2. Aug 2014, 09:20

Hallo Zuschauer,

die Anregung von rethus hatte zum Ziel das die Datenbank nicht bei jedem durchlauf der Schleife aufgerufen wird.
for ($i = 1, $n = $db->num_fields(); $i < $n; $i ++) {
Gruß josh

Zuschauer
Beiträge: 141
Registriert: Do 5. Dez 2013, 08:57
Kontaktdaten:

Re: Probleme beim Auslesen von Feldnamen Datenbanktabelle

Beitrag von Zuschauer » Sa 2. Aug 2014, 13:51

josh hat geschrieben:die Anregung von rethus hatte zum Ziel das die Datenbank nicht bei jedem durchlauf der Schleife aufgerufen wird.
for ($i = 1, $n = $db->num_fields(); $i < $n; $i ++) {
Und wie man unschwer erkennen kann, steht das Auslesen der Anzahl jetzt in der ERSTEN Angabe der IF-Schleife - also dort, wo nur beim Start der Schleife gelesen wird - und wird in eine Variable zwischengespeichert.
In der zweiten Angabe der IF-Schleife, also nach dem ersten Semikolon (;), wird dann nur noch dieser Parameter abgefragt, und dies (zusammen mit Angabe 3) wird bei jedem Durchgang ausgeführt.
Die Möglichkeit, in der ersten Angabe mehrere Variablen für die Schleife zu initieren, wurde extra für solche Zwecke geschaffen.

Gruß
Zuschauer

josh
Beiträge: 156
Registriert: Do 24. Jun 2004, 09:25
Wohnort: Ahlen
Kontaktdaten:

Re: Probleme beim Auslesen von Feldnamen Datenbanktabelle

Beitrag von josh » Sa 2. Aug 2014, 17:53

Hallo Zuschauer,

du hast meine indirekte Frage verstanden.
Danke für die gute Erklärung.

Jetzt geht es erstmal für 2 Wochen in den Urlaub.

Viele Grüße

josh

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Probleme beim Auslesen von Feldnamen Datenbanktabelle

Beitrag von rethus » Mo 4. Aug 2014, 09:17

Zuschauer hat geschrieben:

Code: Alles auswählen

for ($i = 1, $n = $db->num_fields(); $i < $n; $i ++) {
Die Möglichkeit, in der ersten Angabe mehrere Variablen für die Schleife zu initieren, wurde extra für solche Zwecke geschaffen.
Cool, solange ich schon mit PHP programmiere, dass ist mir bisher noch nicht aufgefallen, steht aber auf php.net auch als Empfehlung und ist auch total logisch, wenn man erstmal drüber nachdenkt.
Also die Schreibweise einer for-Schleife in der im ersten Parameter kommasepariert mehrere Variablen zugewiesen werdern wird definitiv in meinen Fundus aufgenommen… :)
Ist zwar auf den ersten Blick (wenn man es nicht kennt) schwerer zu lesen, aber unterm Strich schon sauberer.

Wieder was gelernt. Danke Zuschauer.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

Zuschauer
Beiträge: 141
Registriert: Do 5. Dez 2013, 08:57
Kontaktdaten:

Re: Probleme beim Auslesen von Feldnamen Datenbanktabelle

Beitrag von Zuschauer » Mo 4. Aug 2014, 10:28

Immer gerne :)

Gruß
Zuschauer

Antworten