频道栏目
首页 > 资讯 > 其他数据库 > 正文

如何将 PHP 应用程序连接到 IBM DB2 通用数据库

16-01-08        来源:[db:作者]  
收藏   我要投稿

介绍 PHP:超文本处理器

PHP:超文本处理器(PHP:Hypertext Processor),是一种创建 Web 内容的功能强大且越来越受欢迎的服务器端脚本语言。可移植性是 PHP 受到欢迎的主要原因之一:

  • PHP 定义了一组数据库 API — 统一 ODBC 函数,当您为了获得最佳性能而使用数据库服务器的本机方法来访问底层数据库时,这些 API 为您提供了一个抽象层。
  • 可以在 Microsoft Windows、Linux、BSD、Macintosh OS X 和 UNIX® 服务器上编译和运行 PHP。
  • PHP 可以与包括 Apache 和 Microsoft IIS 在内的大多数流行的 Web 服务器紧密集成,也可以将它用作独立的 CGI 解释器。
  • PHP 的源代码可以免费获取,您可以自由编写和分发 PHP 应用程序,将其用于商业和非商业用途。

PHP 的 统一 ODBC函数对应用程序开发人员极具吸引力。对于将现有的 PHP 应用程序从别的数据库服务器移植到 DB2 通用数据库这一工作,使用此数据库抽象层可以将所需要的步骤减少到一步:更改数据库连接字符串,从而简化了这一移植工作。

PHP 还提供了许多定义良好的 API,用于 XML 转换之类的功能,以及图像和 Adobe 可移植文档格式(Portable Document Format,PDF)文件的实时生成。

在简要介绍了 PHP 脚本编制之后,本文描述了如何将 PHP 编译成支持 DB2 的动态装入的 Apache 模块。本文以几个示例作为结束,这几个示例演示了如何使用 PHP 来连接到数据库、将数据插入数据库以及从数据库中选择的数据。

 

PHP 脚本编制是如何工作的

PHP 基本上是一种服务器端脚本编制语言,它使您能够将应用程序逻辑嵌入 HTML 页面,或者用 PHP 函数创建整个 HTML 页面。当 Web 服务器收到对某个 PHP 页面的请求时,它就将控制转交给 PHP 引擎。PHP 引擎装入该 PHP 页面,执行该页面内所有的 PHP 函数,然后将生成的 HTML 返回给 Web 服务器。

要在 Web 页面内调用 PHP 函数,只需将 PHP 函数嵌入到常规的 HTML 源码内。PHP 函数被嵌入到以 ?php 开始并以 ? 结尾的 HTML 样式的标记内。例如,<?php echo("Hello world!")?> 演示了对 PHP 函数 echo() 的调用。要在该 PHP 标记内包含多个函数,请用分号(;)字符将这些函数分隔开。

当然,可以在一个 PHP 脚本内包含许多 PHP 标记。为了演示使用 PHP 编写 Web 应用程序是多么的容易,下面给出了一段简短的脚本,它打印从任意值开始到任意值结束的一系列数字。

示例 1. 打印序列函数:print.php

<html>
        

<head>
        

  <title>Counting from x to y</title>
        

</head>
        

<body bgcolor="white">
        


  <?php function print_sequence ($start, $stop, $increment) {
        

      if ($start > $stop) {
        

        return(FALSE);
        

      }
        

      elseif ($increment <= 0) {
        

        return(FALSE);
        

      }
        

      else {
        

        for ($i = $start; $i < $stop; $i = $i + $increment) {
        

          print "$i ";
        

        }
        

      }
        

      return(TRUE);
        

    }
        

  ?>
        


  <h1>Counting from x to y</h1>
        

  <p>
        

  Counting from 1 to 10 by 1: <?php print_sequence(1, 10, 1)?>
        

  </p>
        

  <p>
        

  Counting from 2 to 20 by 2: <?php print_sequence(2, 20, 2)?>
        

  </p>
        

</body>
        

</html>
        

注意,在 print.php 中,我们在 HTML 页面的 <body> 部分定义了自己的名为 print_sequence() 的 PHP 函数。该函数接受三个参数,然后对这些值进行一些简单的测试,以确保函数不会开始一个无限循环。尽管 PHP 提供的控制结构语法十分象 Perl,但使用大多数现代编程语言的程序员应该对这种控制结构十分熟悉。最后,该函数返回一个可供调用者测试的值;按照 PHP 约定,0 表示出错,而任何非零值表示成功。

在 HTML 页面的 <body> 中,我们接着使用不同参数两次调用 print_sequence() 函数,以测试该函数。从支持 PHP 的 Web 服务器调用 print.php 会产生以下输出:

Counting from x to y
        


Counting from 1 to 10 by 1: 1 2 3 4 5 6 7 8 9
        


Counting from 2 to 20 by 2: 2 4 6 8 10 12 14 16 18
        

上面的 示例 1. 打印序列函数:print.php演示了如何在 PHP 脚本中定义 PHP 函数并调用它。和其它大多数语言一样,可以在别的定制 PHP 函数中调用您的定制 PHP 函数。还有一点也和其它语言一样,您可以将这些定制函数收集到库中,而这些库则可以被包含到您的 PHP 脚本中。这些特性让您能够迅速构建定制库来支持您的特殊开发需求。

 

编译和配置支持 DB2 V7 的 PHP

PHP 是一种开放源码语言,它支持超过十二种不同数据库及许多不同的 Web 服务器。许多 PHP 开发人员开始在 Linux 服务器上编写 PHP 应用程序,这些 Linux 服务器运行 Apache Web 服务器并且连接到诸如 MySQL 之类的后端数据库。如果您对规模扩展到诸如 DB2 之类的数据库服务器感兴趣,那么我将带您完整地执行相关步骤,这些步骤是将 PHP 编译成在 Red Hat 6.2 系统上支持 DB2 V7 的 Apache 动态模块所必需的。我使用 Red Hat 6.2 是因为它稳定、成熟并通过了良好测试。对其它 Linux 分发版和 UNIX 操作系统的要求可能有所不同,但基本步骤是相同的。

对于 Red Hat 6.2,您可以使用 Red Hat 软件包管理器(Red Hat Package Manager,RPM)来安装 Apache。这些软件包同时还安装了 PHP 的一个预编译版本,但遗憾的是它是一个较老的版本(PHP 3),这个已编译版本不支持 DB2。为简单起见,我假定您已经使用任何相关的开发人员 RPM 安装了 Apache。我的系统上的相关 RPM 如下:

apache-devel-1.3.14-2.6.2.rpm
        


apache-1.3.14-2.6.2.rpm
        


apache-manual-1.3.14-2.6.2.rpm
        

另外一个先决条件是安装 DB2 应用程序开发客户机(DB2 Application Development Client)。您可以从 DB2 网站免费下载 DB2 Personal Developer's Edition,它包含 DB2 应用程序开发客户机。更多关于在 Linux 上安装 DB2 的信息,请参阅 DB2 for Linux HOWTO

编译 PHP

  1. 首先,我们需要下载 PHP 的源码软件包。将浏览器指向 PHP 的网站,然后下载名为 php-4.0.5.tar.gz 的软件包。
  2. 接下来,需要解压缩源码软件包。下面的命令将源码软件包中的内容解压缩到名为 php-4.0.5 的目录中: 

    bash$ tar xzf php-4.0.5.tar.gz
  3. 使用 cd 命令使新创建的源码目录成为工作目录。 

    bash$ cd php-4.0.5
  4. 现在,我们需要指定 PHP 源码的配置选项。PHP 依靠 autoconf 工具集来设置大多数编译及配置选项,因此您可以使用以下命令来查看可能的选项的列表: 

    bash$ ./configure --help

    对于我们的任务,只须为 configure指定三个选项:

    --with-apxs=apxs-path

    该选项指定了 Apache 的 apxs 工具的位置,这个工具允许您构建扩展模块来增加 Apache 的功能。在我的机器上, apxs 揭示: apxs 安装在 /usr/sbin 中。

    --with-ibm-db2=instance-path

    该选项指定 DB2 应用程序开发客户机实例在机器上的位置。在安装 DB2 和创建实例时,缺省位置是 /home/db2inst1 ,所有的 DB2 库和头文件都位于 /home/db2inst1/sqllib 中。您的系统可能有所不同,但我们将使用缺省位置。

    --sysconfdir=etc-path

    该选项指定您希望 PHP 在哪里查找 PHP 配置文件 php.ini 。缺省路径是 /usr/local/etc ,但我们将通过指定 /etc 来将所有配置文件保存在一起。

    因此,为了配置和生成 PHP,请发出下列命令:

    bash$ ./configure --with-apxs=/usr/sbin/apxs \
                
    
         --with-ibm-db2=/home/db2inst1/sqllib --sysconfdir=/etc
  5. 在成功地配置了源文件之后,我们必须使用 make 命令来编译 PHP。这一步执行的时间可能会很长并产生很多输出,因此请将输出以管道方式传送到一个日志文件,在它运行时去网上冲浪。 

    bash$ make > make.out
  6. 在成功地编译 PHP 之后,以 root 用户身份安装 PHP: 

    bash$ su root
                
    
    Password:
                
    
    bash# make install
  7. 最后,请确保 /etc/ld.so.conf 含有 lipphp4.so 共享库路径的一项。如果其中不含 /etc/httpd/modules ,那么请将该路径附加到/etc/ld.so.conf 。然后用以下命令更新库链接高速缓存: 

    bash# /sbin/ldconfig

配置 Apache 来使用 PHP 4.0

不过,我们现在还不能开始运行 PHP 脚本。对于标准 Red Hat 6.2 系统,PHP 安装过程并没有结束,我们还得按照下面的步骤编辑 Apache 配置文件和 Apache 初始化脚本,然后重新启动 Web 服务器:

  1. 作为安装过程的一部分,PHP 会自动修改 Apache 的配置文件 /etc/httpd/conf/httpd.conf ,向其中插入两行,以告诉 Apache 如何动态装入 PHP 4 扩展模块。非常方便的是,PHP 的安装程序对 Apache 的配置文件创建了名为 /etc/httpd/conf/httpd.conf.bak 的备份,以便我们总是能够恢复到以前的配置。

    PHP 将以下两行添加到 /etc/httpd/conf/httpd.conf 

    LoadModule php4_module        lib/apache/libphp4.so
                
    
    .
                
    
    .
                
    
    .
                
    
    AddModule mod_php4.c
                
    

    注意,PHP 所添加的第一行指定了一条相对路径。如果您看一下文件中的其它地方,就会发现其它模块使用 modules/ 前缀,而且如果您检查 /etc/httpd/modules 目录的内容,您会发现已经安装了 libphp4.so 。要想成功地重新启动 Apache,我们还得按下面所示修改LoadModule 这一行以指定 libphp4.so 库的正确位置:

    LoadModule php4_module        modules/libphp4.so
                
    

    PHP 安装程序试图将这两行分别附加到 /etc/httpd/conf/httpd.conf 文件中 LoadModule  AddModule 节的尾部,但在 Red Hat Linux 6.2 上,安装程序会将这两行放在错误的节内。在编辑器内打开该配置文件,搜索标题为 Dynamic Shared Object (DSO) Support 的节,然后再如 示例 2. 在 httpd.conf 中配置 PHP DSO 支持中所示的那样移动含有 php4 的行。

    示例 2. 在 httpd.conf 中配置 PHP DSO 支持

    # Dynamic Shared Object (DSO) Support
                
    
    # To use the functionality of a module built as a DSO, you
                
    
    # have to place corresponding `LoadModule' lines at this location so
                
    
    # the directives contained in it are actually available before they
                
    
    # are used. Please read the file README.DSO in the Apache 1.3
                
    
    # distribution for more details about the DSO mechanism and run
                
    
    # `httpd -l' for the list of already built-in (statically linked and
                
    
    # thus always available) modules in your httpd binary.
                
    
    #
                
    
    # Note: The order in which modules are loaded is important. Don't
                
    
    # change the order below without expert advice.
                
    
    #
                
    
    # Example:
                
    
    # LoadModule foo_module libexec/mod_foo.so
                
    
    .
                
    
    .
                
    
    .
                
    
    LoadModule php4_module        libexec/libphp4.so
                
    
    
    # Reconstruction of the complete module list from all available
                
    
    # modules (static and shared) is necessary to achieve correct module
                
    
    # execution order. [WHENEVER YOU CHANGE THE LOADMODULE SECTION ABOVE,
                
    
    # UPDATE THIS TOO.]
                
    
     ClearModuleList
                
    
    
    AddModule ...
                
    
    .
                
    
    .
                
    
    .
                
    
    AddModule mod_php4.c
                
    
  2. 确认 /etc/httpd/conf/httpd.conf 文件含有以下几行,以确保对 Apache 注册了 PHP 文件类型: 

    AddType application/x-httpd-php .php
                
    
    AddType application/x-httpd-php-source .phps
  3. 要成功地使用我们的 PHP 版本中已编译的 DB2 函数,就必须为 Apache 设置 DB2 环境变量。这样做的最简单方法是将/home/db2inst1/sqllib/db2profile 脚本放在启动 Apache 的包装器中。

    如果 Apache 是使用 RPM 软件包安装的,那么 Apache 就由称为 /etc/rc.d/init.d/httpd 的 SysV init 脚本启动。我们可以将下面这行添加到 /etc/rc.d/init.d/httpd 的顶部从而确保 Apache 继承了 DB2 环境变量:

    . /home/db2inst1/sqllib/db2profile

    如果是从源代码编译 Apache,那么您就必须换一种做法:修改 apachectl脚本以包含上面这行。

  4. 我们必须重新启动 Apache 以使对配置的更改生效。如果是从 RPM 软件包安装 Apache,那么就请以 root 用户发出下列命令来重新启动 Apache: 

    bash# /etc/rc.d/init.d/httpd restart

    如果是从源码编译 Apache,那么请使用以下命令:

    bash# apachectl start

    如果一切顺利,那么 Apache 将准备接受您连接到 DB2 的 PHP 脚本!

 

编写连接到 DB2 通用数据库的 PHP 脚本

为了演示一些使用 PHP 和 DB2 的基本操作,我们将创建一组 Web 页面来帮助您管理一张数据库表,这张表包含一组作者的数据。首先,我们将创建一张表来保存我们的作者数据,然后编写一个 PHP 脚本,它允许我们浏览全部现有的作者。最后,我们将编写一个脚本,它允许用户把他们自己的作者数据添加到表中。

创建 author 表

AUTHOR 表包含四列: LAST_NAME、FIRST_NAME、MIDDLE_INITIAL  AUTHOR_ID ,最后一列是由 DB2 生成的唯一标识符,它充当此表的主键。下列数据定义语言(Data Definition Language,DDL)语句创建了该表:

示例 3. AUTHOR 表的 DDL

CREATE TABLE author (last_name VARCHAR(32) NOT NULL,
        

          first_name VARCHAR(32) NOT NULL,
        

          middle_initial VARCHAR(1),
        

          author_id INTEGER GENERATED ALWAYS AS IDENTITY,
        

          PRIMARY KEY (author_id));

为了创建该表,请将 示例 3. AUTHOR 表的 DDL 中的 DDL 复制到名为 tableddl.db2 的文件中。使用下列命令连接到 DB2 数据库进而发出该 DDL。

bash$ db2 connect to SAMPLE
        

bash$ db2 -t -f tableddl.db2

使用 PHP 连接到数据库

为了使用此数据库,我们需要向表插入一些数据。我们可以发出一些数据操纵语言(Data Manipulation Language,DML)语句,但由于我们已经安装了 PHP,因此我们将创建并使用一个简单的 PHP 表单,用来在数据库中插入新记录。下面所有的 PHP 脚本都使用 PHP 文档中描述的统一 ODBC 函数。

我们必须先在 PHP 脚本中创建一个数据库连接,才能插入数据。一旦返回一个带有我们的用户名的表清单,就可以确认连接成功,从而可以在我们编写的脚本的剩余部分重用该连接函数。

注:要连接到 DB2 数据库,则必须在 DB2 客户机内对该数据库编目。这意味着,无论将 PHP 安装到何处,必须还要安装 DB2 客户机。要从命令行测试到数据库的连接,请使用以下命令:

db2 connect to database user username using password

使用 PHP 连接到数据库的语法如下:

int 
        odbc_connect() (string dsn, string user, string password
        

[, int cursor_type]);

其中:

dsn           在 DB2 目录中注册的数据库名称。
        

user          将要连接到数据库的用户名称。
        

password      用户密码。
        

cursor_type   可选参数,用来指定游标行为。

因此,要使用用户名 db2inst1 和密码 ibmdb2 连接到样本数据库 SAMPLE ,可以在我们的脚本中使用下面这个函数:

示例 4. 简单的数据库连接函数:db2lib.php

<?php function dbconnect($verbose) {
        

  $dbname = "SAMPLE";
        

  $username = "db2inst1";
        

  $password = "ibmdb2";
        


  // odbc_connect returns 0 if the connection attempt fails;
        

  // otherwise it returns a connection ID used by other ODBC functions
        

  $dbconn = odbc_connect($dbname, $username, $password);
        


  if (($verbose == TRUE) && ($dbconn == 0)) {
        

    echo("Connection to database failed.");
        

    $sqlerror = odbc_errormsg($dbconn);
        

    echo($sqlerror);
        

  }
        


  return($dbconn);
        

}
        

?>
        

如果脚本成功地连接到了数据库,那么它就简单地将数据库连接句柄返回给调用者。

如果连接失败并且您要求详细的输出,那么脚本会告诉您它无法连接到数据库,随后它调用 odbc_errormsg() 函数来打印从数据库返回的错误消息。

我们将把 示例 4. 简单数据库连接函数:db2lib.php 中的代码保存在名为 db2lib.php 的文件中,这样我们就可以在脚本的其余部分中包含该函数。

发出 INSERT 语句

一旦成功地连接到了数据库,您就可以开始做一些比较有趣的工作了,如插入、更新及检索数据。下面的示例为样本应用程序在表中插入一组新数据。

注:

因为以下两个原因,我们将 SQL 语句定义成了一个字符串变量:

  1. 在文件的顶部定义我们所有的 SQL 语句可以使阅读代码,以及修改元素以调整应用程序变得更容易。对于包含 JOIN 操作或复杂的 WHERE 子句的 SQL 长语句(可能包含几行语句),这一点特别有用。
  2. 在许多数据库应用程序中,我们需要重复发出相同的语句,只不过使用的值有时略有不同。开发应用程序时将语句声明为字符串变量使得将应用程序转换成生产应用程序更加容易。

发出静态 SQL 语句

可以使用 odbc_exec() 函数发出简单的 SQL 语句 — 这种 SQL 语句不含变量输入的参数标记。下面的脚本将新的几行插入 AUTHOR 表:

示例 5. 静态 INSERT 语句:db2insert.php

<html>
        

<head>
        

  <title>INSERT data into AUTHOR table</title>
        

</head>
        

<body bgcolor="white">
        

<?php
        


  // include the dbconnect() function
        

 include_once("db2lib.php");
        


  $author_insert = "INSERT INTO author" .
        

    "(last_name, first_name, middle_initial)" .
        

    "VALUES('Scott', 'Daniel', 'B')";
        


  $verbose = TRUE;
        

  $dbconn = dbconnect($verbose);
        


  if ($dbconn != 0) {
        

    // odbc_exec returns 0 if the statement fails; otherwise
        

    // it returns a result set ID
        

    $result = odbc_exec($dbconn, $author_insert);
        


    if ($result == 0) {
        

      echo("INSERT statement failed.");
        

      $sqlerror = odbc_errormsg($dbconn);
        

      echo($sqlerror);
        

    }
        

    else {
        

      echo("Successfully inserted one row.");
        

    }
        

  }
        

?>
        

使用参数标记发出 SQL 语句

的确,在现实世界中,您可能不会编写一个脚本来向数据库反复插入同一行。您可能会编写一个脚本来为您提供 HTML 表单,以减轻您的数据输入任务(或网站用户的数据输入任务)。幸运的是,PHP 使处理 HTML 表单输入变得容易。当 PHP 脚本成为 HTML <form> 元素的目标操作时,任何 CGI 参数都会被自动转换成 PHP 脚本内的局部变量。每个局部变量的名称都对应着表单中相应输入域的 NAME 属性。

如果您想多次重复发出同一条语句,那么 odbc_exec() 函数是一种代价高昂的方法,因为它每次都要编译并执行该语句。可以用如下办法来改善应用程序的性能:在单独的步骤内使用 odbc_prepare() 来编译该语句,然后多次调用 odbc_execute() 来执行预编译的语句。

在下面的示例中,我们创建另一个 PHP 库,并创建了一个脚本来显示 HTML 表单,从而帮助我们向 AUTHOR 表中插入数据。该库演示了如何使用 odbc_prepare() 函数编译包含参数标记的 INSERT 语句。我们使用 PHP 功能强大的 HTML 表单解析来确定是否使用了任何 CGI 变量值来调用脚本;如果没有,那么我们就只返回 HTML 表单。如果使用了 CGI 变量值来调用脚本,那么我们将解析各个表单域的内容,然后将其参数作为数组传递给 odbc_execute() 函数以将数据插入表中。

示例 6. 使用 odbc_prepare 的动态 INSERT 和表单提交库:db2form.php

<?php function insert_data( $dbconn, $last_name, $first_name, $middle_initial) {
        

  $insert_stmt = "INSERT INTO author " .
        

    "(last_name, first_name, middle_initial) VALUES(?, ?, ?)";
        


  // odbc_exec returns 0 if the statement fails; otherwise
        

  // it returns a result set ID
        

  $result = odbc_prepare($dbconn, $insert_stmt);
        


  if ($result == 0) {
        

    echo("odbc_prepare() failed.");
        

    return(FALSE);
        

  }
        

  else {
        

    // build array of parameter values for INSERT statement
        

    $param_array["last_name"] = $last_name;
        

    $param_array["first_name"] = $first_name;
        

    $param_array["middle_initial"] = $middle_initial;
        


    echo("Inserted $last_name and $first_name and $middle_initial");
        


    odbc_execute($result, $param_array);
        

  }
        

  return(TRUE);
        

}
        

?>
        


<?php function author_form($action) {
        

  // $form is a HERE string that spans multiple lines
        

  $form = <<<HERE
        

<pre>
        

<form action="$action" method="post">
        

Last name: <input type="text" name="last_name" size="32" maxlength="32">
        

First name:<input type="text" name="first_name" size="32" maxlength="32">
        

Initial:   <input type="text" name="middle_initial" size="1" maxlength="1">
        

<input type="submit" value="Insert data">
        

</form>
        

</pre>
        

HERE;
        


  return($form);
        

  }
        

?>
        

db2form.php 是我们的第二个 PHP 库,其中包含 insert_data()  author_form() 函数。将这些函数放在库中使我们能够在其它脚本中重用它们。下面的脚本 prepinsert.php 确实正好执行了这样的角色;该脚本中包含了 db2lib.php 以利用标准数据库连接函数,还包含 db2form.php,用于标准 INSERT 和表单提交功能。该脚本返回一个带有简单表单的 Web 页面,该表单允许我们在数据库中插入新行,该脚本其实只是一个调用库函数的包装器。

示例 7. 动态 INSERT 和表单提交脚本:prepinsert.php

<html>
        

<head>
        

<title>INSERT using odbc_prepare()</title>
        

</head>
        

<body bgcolor="white">
        

<!-- The form within this PHP script calls itself as
        

     the action-handler using the $PHP_SELF constant.
        

     If the script is called without CGI parameter values,
        

     only the form is displayed on the page.
        

     If the script is called with CGI parameter values,
        

     we also call the custom function insert_data(). -->
        


<?php
        

  // include our custom function libraries
        

  include_once("db2lib.php");
        

  include_once("db2form.php");
        

?>
        


<?php
        

  if (($last_name == "") || ($first_name == "")) {
        

    // we received no parameter values; just print the form
        

  }
        

  else {
        

    $verbose = TRUE;
        

    $dbconn = dbconnect($verbose);
        


    if ($dbconn == 0) {
        

      return(FALSE);
        

    }
        

    else {
        

      insert_data($dbconn, $last_name, $first_name, $middle_initial);
        

    }
        

  }
        


  // $PHP_SELF is a constant that contains the name of this script
        

  echo(author_form($PHP_SELF));
        

?>
        

</body>
        

</html>
        

SELECT 语句和结果集

SELECT 语句经常会返回多行数据。在为 SELECT 语句调用 odbc_exec() 函数时,该函数返回一个 result set 标识符。结果集是一个数组,该数组由 0 个或多个与数据库查询相匹配的行组成;结果集标识符只是一个值,您可以将该值传递给其它函数,以使它们能够使用结果集中的行。

一旦检索到了结果集标识符,我们就可以使用一个非常方便的 PHP 函数 odbc_result_all() 来显示结果集中的内容。该函数将整个结果集打印成 HTML 表。

示例 8. 简单的 SELECT 语句:db2select.php

<html>
        

<head>
        

<title>Simple SELECT statement</title>
        

</head>
        

<body bgcolor="white">
        


<?php
        

  // include our custom function libraries
        

  include_once("db2lib.php");
        

  include_once("db2form.php");
        

?>
        


<?php function display_authors($dbconn) {
        

  // select all rows from the AUTHOR table
        

  $select_stmt = "SELECT last_name, first_name, middle_initial, author_id " .
        

    "FROM author ";
        


  if ($dbconn != 0) {
        

    // odbc_exec returns 0 if the statement fails;
        

    // otherwise it returns a result set ID
        

    $result = odbc_exec($dbconn, $select_stmt);
        


    if ($result == 0) {
        

      echo("SELECT statement failed.");
        

      $sqlerror = odbc_errormsg($dbconn);
        

      echo($sqlerror);
        

    }
        

    else {
        

      // odbc_result_all prints all of the rows
        

      // for a result set ID as an HTML table
        

      odbc_result_all($result);
        

    }
        

  }
        

}
        

?>
        


<?php
        

  $verbose = TRUE;
        

  $dbconn = dbconnect($verbose);
        


  if (($last_name == "") || ($first_name == "")) {
        

    // we received no parameter values; just print the form
        

  }
        

  else {
        

    insert_data($dbconn, $last_name, $first_name, $middle_initial);
        

  }
        

  echo(author_form($PHP_SELF));
        

 
  display_authors($dbconn);
        

?>
        

</body>
        

</html>
        

db2select.php 通过向其中添加了一个称为 display_authors() 的新函数简单地扩展了 prepinsert.php 。该函数显示 AUTHOR 表中全部作者的列表,但我们继续显示提交表单,在 Submit按钮被按下时插入新作者。该脚本应该生成一个 HTML 页面,其输出类似下面的样子,具体输出取决于您插入到表中的记录:

Last name:  __________
        

First name: _________
        

Initial:    _
        


Submit
        


LAST_NAME FIRST_NAME MIDDLE_INITIAL AUTHOR_ID
        

Scott     Daniel     B              1
        

Finn      Huck                      2
        

Baggins   Bilbo      H              3
 

结束语(实际上只是开始)

本文介绍了 PHP 脚本编制语言,描述了如何编译和配置支持 DB2 通用数据库的 PHP,并演示了如何使用 PHP 执行诸如创建连接、修改数据和使用 CGI 表单检索数据之类的基本数据库操作。然而,对于结合 PHP 和 DB2 所能做的全部事情而言,这只是一个开始。

虽然 PHP 可以用作灵活且可扩展的服务器端语言来操作数据库信息,但它还包括完善的数据表示接口(包括利用可扩展样式表语言转换(Extensible Stylesheet Language Transformation,XSLT)的 XML 支持)、Web 搜索引擎以及动态生成多媒体输出(如 Macromedia Shockwave Flash 动画、Adobe 可移植文档格式(PDF)文件及图像)的能力。以下是一些网站的列表,这些网站提供了进一步的信息和示例应用程序。

相关TAG标签
上一篇:PHP Global定义全局变量使用说明
下一篇:PHP中全局变量global和$GLOBALS[]的区别分析
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站