Weniger Schreibarbeit mit SQL Abfragen

von Wolfgang Arnberger

Die Ergebnisse einer SQL Abfrage zu extrahieren ist oftmals eine
lange Prozedur. Sie können sich hierbei jedoch einiges einsparen.

Um das Ergebnis einer SELECT Abfrage in Variable zu schreiben,
können Sie folgendermaßen vorgehen:

<?php
  $result 
mysql_query("SELECT * FROM tabelle WHERE bedingung");
  while(
$row mysql_fetch_array($result)) {
  
// Ergebnis in Variable schreiben
  
$feld1 $row["feld1"];
  
$feld2 $row["feld2"];
  
$feld3 $row["feld3"]; // u.s.w.
  // Daten anzeigen
  
echo $feld1.", ".$feld2.", ".$feld3."<BR>";

  }
?>

Diese Vorgangsweise führt zu erheblicher Schreibarbeit. Immer
wieder schreibt man Code wie “$feld = $row[“feld”];”. Besonders
bei längeren Feldlisten ist das lästig.

Alternativ kann man so vorgehen:

<?php
  $result 
mysql_query("SELECT * FROM tabelle WHERE bedingung");
  while(
$row mysql_fetch_array($result)) {
  
// Anzahl der Felder ermitteln
  
$j mysql_num_fields($result);
  for(
$i=0;$i<$j;$i++) {
    
// Name des aktuellen Feldes ermitteln
    
$k mysql_field_name($result,$i);
    
// Dem Feldnamen einen Wert zuweisen
    
$$k $row[$k];
    }
// Daten anzeigen
  
echo $feld1.", ".$feld2.", ".feld3."<BR>";

  }
?>

Diesen Code muß man nur mehr in das Script kopieren, die
SQL-Abfrage eintragen und kann sich die ganze Schreibarbeit mit
“$feld = $row[“feld”];” ersparen.

In der Variablen $j wird die Anzahl der Felder gespeichert. Anschließend
wird mit der for-Schleife jedes Feld angesprochen. Dabei wird der
Name des jeweiligen Feldes in $k gespeichert.

Man kann jetzt natürlich nicht der Variablen $k den Wert aus
$row[…] zuweisen, da man damit den Namen des Feldes überschreiben
würde. Um den Inhalt der Variablen $k als Variablennamen zu
verwenden und diesem Inhalt einen Wert zuzuweisen, schreibt man
$$k = $row[…]. Damit wird nicht die Variable $k sondern der Inhalt
der Variablen $k angesprochen.

(wa)

Vielen dank an IT-Studio.net,
und an Herrn Arnberger.

This entry was posted in PHP Tricks. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *