Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere PHP-API » PHP-Skripten schreiben

 

Daten aus einer Datenbank abrufen

In Webseiten werden PHP-Skripten oft verwendet, um die in einer Datenbank enthaltenen Informationen abzurufen und anzuzeigen. Die nachstehenden Beispiele zeigen einige nützliche Techniken.

Einfache Select-Abfrage

Der nachstehende PHP-Code zeigt eine einfache Methode, um die Ergebnismenge einer SELECT-Anweisung in eine Webseite einzufügen. In diesem Beispiel wird eine Verbindung mit der SQL Anywhere-Beispieldatenbank aufgenommen und eine Liste von Kunden zurückgegeben.

Dieser Code kann in eine Webseite eingebettet werden, wenn Ihr Webserver für PHP-Skripten konfiguriert ist.

Der Quellcode für dieses Beispiel ist in Ihrer SQL Anywhere-Installation in einer Datei namens query.php enthalten.

<?php
  # Connect using the default user ID and password
  $conn = sasql_connect( "UID=DBA;PWD=sql" );
  if( ! $conn ) {
      echo "sasql_connect failed\n";
  } else {
      echo "Connected successfully\n";
      # Execute a SELECT statement
      $result = sasql_query( $conn, "SELECT * FROM Customers" );
      if( ! $result ) {
          echo "sasql_query failed!";
      } else {
          echo "query completed successfully\n";
          # Generate HTML from the result set
          sasql_result_all( $result );
          sasql_free_result( $result );
      }
      sasql_close( $conn );
  }
?>

Die Funktion sasql_result_all holt alle Zeilen der Ergebnismenge und generiert eine HTML-Ausgabetabelle, um sie anzuzeigen. Die Funktion sasql_free_result gibt die Ressourcen frei, die zum Speichern der Ergebnismenge verwendet wurden.

Nach Spaltennamen abrufen

Es kann sein, dass Sie nicht alle Daten aus einer Ergebnismenge anzeigen wollen oder die Daten in unterschiedlicher Weise aufbereitet werden sollen. Im folgenden Beispiel wird gezeigt, wie Sie größere Kontrolle über das Ausgabeformat der Ergebnismenge gewinnen können. PHP ermöglicht Ihnen die Anzeige von Daten in jeder beliebigen Menge und in jedem gewünschten Format.

Der Quellcode für dieses Beispiel ist in Ihrer SQL Anywhere-Installation in einer Datei namens fetch.php enthalten.

<?php
  # Connect using the default user ID and password
  $conn = sasql_connect( "UID=DBA;PWD=sql" );
  if( ! $conn ) {
      die ("Connection failed");
  } else {
      # Connected successfully.
  }
  # Execute a SELECT statement
  $result = sasql_query( $conn, "SELECT * FROM Customers" );
  if( ! $result ) {
      echo "sasql_query failed!";
      return 0;
  } else {
      echo "query completed successfully\n";
  }
  # Retrieve meta information about the results
  $num_cols = sasql_num_fields( $result );
  $num_rows = sasql_num_rows( $result );
  echo "Num of rows = $num_rows\n";
  echo "Num of cols = $num_cols\n";
  while( ($field = sasql_fetch_field( $result )) ) {
      echo "Field # : $field->id \n";  
      echo "\tname   : $field->name \n";  
      echo "\tlength : $field->length \n";   
      echo "\ttype   : $field->type \n";  
  }
  # Fetch all the rows
  $curr_row = 0;
  while( ($row = sasql_fetch_row( $result )) ) {
      $curr_row++;
      $curr_col = 0;
      while( $curr_col < $num_cols ) {
          echo "$row[$curr_col]\t|"; 
          $curr_col++;
      }
      echo "\n";
  }
  # Clean up.
  sasql_free_result( $result );
  sasql_disconnect( $conn );
?>

Die Funktion sasql_fetch_array gibt eine einzelne Zeile aus der Tabelle zurück. Die Daten können nach Spaltennamen und Spaltenindizes abgerufen werden.

Die Funktion sasql_fetch_assoc gibt eine einzelne Zeile als ein assoziatives Array zurück. Die Daten können unter Verwendung der Spaltennamen als Indizes abgerufen werden. Im Folgenden finden Sie ein Beispiel.

<?php
  # Connect using the default user ID and password
  $conn = sasql_connect("UID=DBA;PWD=sql");
  
  /* check connection */
  if( sasql_errorcode() ) {
      printf("Connect failed: %s\n", sasql_error());
      exit();
  }
  
  $query = "SELECT Surname, Phone FROM Employees ORDER by EmployeeID";
  
  if( $result = sasql_query($conn, $query) ) {
  
      /* fetch associative array */
      while( $row = sasql_fetch_assoc($result) ) {
          printf ("%s (%s)\n", $row["Surname"], $row["Phone"]);
      }
  
      /* free result set */
      sasql_free_result($result);
  }
  
  /* close connection */
  sasql_close($conn);
?>

Zwei weitere ähnliche Methoden werden in der PHP-Schnittstelle bereitgestellt: sasql_fetch_row gibt eine Zeile zurück, die nur nach Spaltenindizes durchsucht werden kann, während sasql_fetch_object eine Zeile zurückgibt, die nur nach Spaltennamen durchsucht werden kann.

Ein Beispiel für die Funktion sasql_fetch_object finden Sie im Beispielskript fetch_object.php.

Verschachtelte Ergebnismengen

Wenn eine SELECT-Anweisung an die Datenbank geschickt wird, gibt das Programm eine Ergebnismenge zurück. Die Funktionen sasql_fetch_row und sasql_fetch_array rufen Daten aus den einzelnen Zeilen einer Ergebnismenge ab und geben jede Zeile als Spaltenarray zurück, in dem weitere Abfragen durchgeführt werden können.

Der Quellcode für dieses Beispiel ist in Ihrer SQL Anywhere-Installation in einer Datei namens nested.php enthalten.

<?php
  # Connect using the default user ID and password
  $conn = sasql_connect( "UID=DBA;PWD=sql" );
  if( ! $conn ) {
      die ("Connection failed");
  } else {
      # Connected successfully.
  }
  # Retrieve the data and output HTML
  echo "<BR>\n";
  $query1 = "SELECT table_id, table_name FROM SYSTAB";
  $result = sasql_query( $conn, $query1 );
  if( $result ) {
    $num_rows = sasql_num_rows( $result );
    echo "Returned : $num_rows <BR>\n";
    $I = 1;
    while( ($row = sasql_fetch_array( $result ))) {
      echo "$I:  table_id:$row[table_id]" .
           " --- table_name:$row[table_name] <br>\n";
      $query2 = "SELECT table_id, column_name " .
      "FROM SYSTABCOL" . 
      "WHERE table_id = '$row[table_id]'";
      echo " $query2 <br>\n";
      echo "  Columns: ";
      $result2 = sasql_query( $conn, $query2 );
      if( $result2 ) {
     while(($detailed = sasql_fetch_array($result2))) {
         echo " $detailed[column_name]";
     }
     sasql_free_result( $result2 );
      } else {
     echo "******FAILED********";
      }
      echo "<br>\n";
      $I++;
    }
  }
  echo "<BR>\n";
  sasql_disconnect( $conn );
?>

Im obigen Beispiel wählt die SQL-Anweisung die Tabellen-ID und den Namen für jede Tabelle in SYSTAB aus. Die Funktion sasql_query gibt ein Zeilenarray zurück. Das Skript durchläuft die Zeilen mithilfe der Funktion sasql_fetch_array, um die Zeilen aus einem Array abzufragen. Eine innere Iteration wandert durch die Spalten der einzelnen Zeile und gibt ihre Werte aus.