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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 编程 » SQL Anywhere 数据访问 API » SQL Anywhere PHP API » 编写 PHP 脚本

 

从数据库检索数据

PHP 脚本在 Web 页中的一个用途是检索并显示数据库中包含的信息。以下示例介绍了一些非常有用的技术。

简单选择查询

以下 PHP 代码介绍了一种在 Web 页中包含 SELECT 语句的结果集的便捷方法。此示例用来连接到 SQL Anywhere 示例数据库并返回一个客户列表。

此代码可以嵌入到 Web 页中,条件是 Web 服务器已配置为可以执行 PHP 脚本。

本示例的源代码包含在 SQL Anywhere 安装目录中一个名为 query.php 的文件中。

<?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 );
  }
?>

sasql_result_all 函数可读取结果集中的所有行,并生成一个 HTML 输出表来显示这些行。sasql_free_result 函数释放用来存储结果集的资源。

按列名读取

某些情况下,您可能不想显示结果集中的所有数据,或是希望以其它方式显示这些数据。下面的示例说明如何对结果集的输出格式进行更好地控制。PHP 允许您以选择的任何方式显示任意数量的信息。

本示例的源代码包含在 SQL Anywhere 安装目录中一个名为 fetch.php 的文件中。

<?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 );
?>

sasql_fetch_array 函数从表中返回单行。可以按列名和列索引检索这些数据。

asql_fetch_assoc 函数从表中返回单行作为一个联合数组。可以使用列名作为索引来检索这些数据。以下是一个示例。

<?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);
?>

在 PHP 接口中还提供了其它两个类似的方法:sasql_fetch_row 返回一个仅能按列索引加以搜索的行,而 sasql_fetch_object 则返回一个仅能按列名搜索的行。

有关 sasql_fetch_object 函数的示例,请参见 fetch_object.php 示例脚本。

嵌套结果集

向数据库发送一条 SELECT 语句时,会返回一个结果集。sasql_fetch_row 和 sasql_fetch_array 函数从结果集的各行检索数据,然后将每行作为可以进一步查询的列数组返回。

本示例的源代码包含在 SQL Anywhere 安装目录中一个名为 nested.php 的文件中。

<?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 );
?>

在上例中,SQL 语句从 SYSTAB 中为每个表选择表 ID 和名称。sasql_query function 函数返回一个行数组。该脚本使用 sasql_fetch_array 函数迭代通过各行,以从数组检索行。一个内部迭代遍历每行中的列并显示其值。