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 函数迭代通过各行,以从数组检索行。一个内部迭代遍历每行中的列并显示其值。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |