转载

Bluemix 基础:将一个 SQL 数据库添加到您的 PHP 应用程序中

 

概述

学习如何在 Bluemix 上创建一个 SQL 数据库,并将其添加到您的 PHP Web 应用程序中。探索一个数据驱动、动态生成的网络商店,该商店会根据当前库存水平来改变外观。使用基于 Web 的 Bluemix SQL 数据库控制台查看和维护您的 SQL 数据库。

本教程是 developerWorks 上的 “Bluemix 基础” 教程系列的一部分。

 

您将在本教程中完成的任务

 

第 1 步. 下载代码

第 2 步. 将应用程序部署到 Bluemix

第 3 步. 创建一个 SQL Database 服务实例并将它绑定到您的应用程序中

第 4 步. 通过 ibm_db2 PHP 模块将数据添加到 SQL 数据库中

第 5 步. 检查代码结构

第 6 步. 通过 Bluemix SQL 数据库控制台访问 SQL 数据库

第 7 步. 探索数据驱动的动态网站生成

其他 Bluemix 服务

测验时间!

恭喜您 — 您已经完成了 Bluemix 基础的学习!

让我们开始吧。

 

在前一篇教程 “将大量服务添加到您的应用程序中” 中,您已经了解到,服务只是 Bluemix 或第三方合作伙伴托管的代码,它们可以给您部署的 Bluemix 应用程序增添价值。

服务给您的应用程序带来了强大的功能,比如数据库、移动应用程序支持、分析、遗留系统集成和安全管理。从某种意义上讲,它们就像是插件,您随时可以向应用程序添加和绑定服务。

在可用的 Bluemix 服务中,数据库服务是最常使用的。而 SQL Database 服务是最流行的 Web 应用程序附加功能之一。

为经典的三层架构设计的大部分 Web 应用程序(比如 Java EE 应用程序)都在第三层需要一个数据库服务:

Bluemix 基础:将一个 SQL 数据库添加到您的 PHP 应用程序中

您的应用程序逻辑在无状态的应用程序层运行,而数据存储在数据库层。此架构使您只需增加应用程序实例的数量,就可以将应用程序扩展到越来越多的用户。

本教程将快速概述如何使用 Bluemix 将一个 SQL Database 服务添加到您的 Bluemix 应用程序中。

Bluemix 基础:将一个 SQL 数据库添加到您的 PHP 应用程序中

您将创建 SQL Database 服务的一个实例,并将它绑定到您的 PHP 应用程序。然后您将在数据库中创建表(也称为模式),并在其中填入数据。您将了解 Web 应用程序如何能够根据数据库中的数据来动态地改变外观。最后,您将使用 Bluemix 上的 IBM SQL 数据库控制台,用它作为访问您的数据的替代方式。

完成本教程所需的知识

 

完成本教程所需的软件

 

第 1 步. 下载代码

 
  1. 单击此按钮下载示例 PHP Web 应用程序 phpsqltutorial.zip 的代码:

    下载示例 PHP Web 应用程序

  2. 将 phpsqltutorial.zip 保存到您的计算机并解压缩其内容,其中包括:
    • dataseeder 目录包含的 PHP 代码将访问 DB2 SQL 数据库来创建表和填充数据库数据。
    • restock 目录包含的 PHP 代码将访问 DB2 SQL 数据库来为脱销印刷品补进存货。
    • static 目录包含应用程序的所有静态资产,其中包括 CSS、图像和在浏览器上运行的客户端 JavaScript 代码。
    • views 包含构成应用程序的页面的两个模板(.tpl 文件)。每个模板文件都可以包含动态元素,这些元素将动态地呈现传入的请求。
    • vars.php 包含的代码将访问 DB2 SQL 数据库,并创建一些变量,供模板在动态生成页面的过程中使用。
    • index.php 是主要程序开关,它将传入的请求路由到 views 目录中的一个模板。

第 2 步. 将该应用程序部署到 Bluemix

 

现在将该应用程序部署到 Bluemix,创建 SQL Database 服务的一个实例并绑定到它。

  1. 如果尚未登录 Bluemix,请从您的 OS 命令提示符运行以下命令进行登录:

    cf api https://api.ng.bluemix.net/
    cf login

  2. 运行下面这个命令,将应用程序部署到 Bluemix:

    cf push your-app-name –m 128M -b https://github.com/ibmdb/db2heroku-buildpack-php

    您为您的应用程序选择的名称必须在 Bluemix 上是唯一的;换句话说,它不能被其他任何 Bluemix 用户使用。如果该名称(称为 “route”)已被使用,您将得到一个错误。

  3. 在浏览器中打开 https://your-app-name.mybluemix.net/ in 来试用您的应用程序,这是一个名为 Lauren's Lovely Landscapes 的简单的网络商店。

    在之前的教程中,您可能已熟悉该应用程序。该商店目前销售三种印刷品;每种印刷品的页面显示了关联的名称、图像和价格。但您会注意到,这个网络商店中没有列出任何印刷品!这是因为这个网络商店将显示来自某个数据库的印刷品库存,但此版本现在未连接到任何数据库。您将在下一步中建立该连接。

    Bluemix 基础:将一个 SQL 数据库添加到您的 PHP 应用程序中

    点击查看大图

第 3 步. 创建一个 SQL Database 服务实例并将它绑定到您的应用程序中

 

Bluemix 上的 SQL Database 服务提供了 IBM DB2 的一个实例,您可以在您的应用程序中绑定这些实例并立即使用它们。目前的免费 beta 计划提供了一个支持最多 10 个并发连接和 100 MB 的实例;其他计划提供了高达 500GB 和 100 个并发连接的选项。

  1. 使用免费 beta 计划创建 SQL Database 服务的一个实例,并将它命名为 “laurenlandscapes”:

    cf create-service sqldb sqldb_free laurenlandscapes

  2. 将这个 SQL Database 服务实例绑定到运行的应用程序:

    cf bind-service your-app-name laurenlandscapes

  3. 重新暂存该应用程序,以重设环境变量:

    cf restage your-app-name

尽管该数据库服务现在已绑定到该应用程序,但应用程序中的代码还未使用该数据库。接下来的几步将解决此问题。

第 4 步. 通过 ibm_db2 PHP 模块将数据添加到 SQL 数据库中

 

数据定义语言或 DDL 通常为 SQL 数据库采用 CREATE TABLE 和 DROP TABLE 语句。它定义了一个表的模式,包括字段、索引和其他关系数据库特性。

您在 第 2 步 中用来将应用程序部署到 Bluemix 的专用 构件包 (buildpack) 包含 ibm_db2 PHP 模块,一个供 PHP 应用程序访问 IBM DB2 SQL 数据库的驱动程序。

在 dataseeder 目录下,您将找到 dataseeder.php 文件,其中包含的代码访问 DB2 SQL 数据库来:

  • 使用 DDL 创建 PRINT 表
  • 为表提供三种印刷品的信息
  1. 访问以下 URL,创建 PRINT 表并使用三种印刷品来填充它:http://your-app-name/dataseeder/dataseeder.php

    此时将会显示一个几乎空白的页面,其中的消息表明已成功提供数据。

  2. 在浏览器中重新载入 https://your app name.mybluemix.net/。您现在应看到商店中有货的印刷品,但您会注意到 Australia 印刷品使用红色突出显示,而且无法选中。

    这是因为该印刷品脱销了。如果查看 dataseeder.php 中的代码,您会看到 Australia 印刷品的数量被设置为 0。

    Bluemix 基础:将一个 SQL 数据库添加到您的 PHP 应用程序中

    点击查看大图

第 5 步. 检查代码结构

 

我们首先回顾一下 “将 PHP 应用程序部署到云” 教程中的原始代码结构。

在原始代码中,views 目录中有 4 个模板:home.tplalaska.tplantarctica.tplaustralian.tpl。传入的每个对 Lauren's Lovely Landscapes 商店的一个页面的 Web 请求由 index.php 路由到 4 个模板中的一个。路由到该模板时,该代码附加了一个名为 $site_title 的 PHP 变量,该变量是用 vars.php 创建的,其中包含网站标题信息。每个模板都使用此对象来呈现其标题 (Lauren’s Lovely Landscapes)。

在新代码中,如果查看 views 目录,就会注意到它现在只有 2 个模板:home.tplprintdesc.tpl

Bluemix 基础:将一个 SQL 数据库添加到您的 PHP 应用程序中

点击查看大图

printdesc.tpl 现在负责动态生成任一种印刷品的详细描述,取代三个单独的模板的工作。主要 index.php 继续充当传入请求的路由器,将请求定向到一个模板。 路由到模板时,index.php 完全像之前一行包含 vars.php

但是,vars.php 现在包含 DB2 SQL 数据库访问代码来查询数据库中的可用印刷品。除了 $site_title 变量之外,vars.php 还为 home.tpl 创建了包含印刷品对象信息数组的 $prints 变量,以便动态生成其可用印刷品列表:

$sql = "select * from print";
$result = db2_exec($conn, $sql, array('cursor' => DB2_SCROLLABLE));
…
while($row = db2_fetch_object($result))
 {
            $prints[] = clone $row;
}

index.php 还通过为 printdesc.tpl 模板附加一个包含印刷品详细信息的 $print 变量来生成印刷品详细描述,从而处理对印刷品描述和定价页面的传入请求:

include('vars.php');
$lll_route = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$print = $prints[$_GET['id'] - 1];
if (file_exists("views/$lll_route.tpl")) {
…

第 6 步. 通过 Bluemix SQL 数据库控制台访问 SQL 数据库

 
  1. 登录 Bluemix 仪表板。
  2. 找到您创建的 laurenlandscapes SQL Database 服务。单击左边窗格中的 SERVICES 来展开它,选择 laurenlandscapesBluemix 基础:将一个 SQL 数据库添加到您的 PHP 应用程序中

    点击查看大图

  3. 单击 Launch 按钮。这会启动您的实例来查看和操作。在这里,可以从 Excel 电子表格将数据加载到您的 SQL 数据库中。 Bluemix 基础:将一个 SQL 数据库添加到您的 PHP 应用程序中

    点击查看大图

  4. 现在单击 Work with Tables,然后选择 PRINT。在右边窗格中选择 Browse Data。您现在会看到 print 表中的所有行,这些行是 DataSeeder 在第 5 步中插入的。 Bluemix 基础:将一个 SQL 数据库添加到您的 PHP 应用程序中

    点击查看大图

第 7 步. 探索数据驱动的动态网站生成

 

在最后一步中,假设一批新的 Australia 印刷品已到货,所以您需要更新数据库中的可用数量。然后您会看到网站在动态地发生变化,以包含新入库的商品。

  1. 转到以下 URL 来访问补进存货代码:https://your-app-name.mybluemix.net/restock/restock.php

    这会将 Australia 印刷品数量从 0 增加到 3。

  2. 在浏览器中重新载入 https://your app name.mybluemix.net/。您现在可以看到所有印刷品都有货了!Australia 印刷品不再显示为红色。可以尝试选择它来查看细节。 Bluemix 基础:将一个 SQL 数据库添加到您的 PHP 应用程序中

    点击查看大图

restock.php 代码的原理类似于 dataseeder.php。它直接访问 SQL 数据库并将 Australia 印刷品的数量更新为 3:

$conn = db2_connect($conn_string, '', '');
…
$sql = "UPDATE print set quan=3 where id=3";
$result = db2_exec($conn, $sql);
if ($result) {
	print "item restocked";
}
db2_close($conn);

如果您想知道该应用程序如何处理脱销印刷品的动态呈现,可以找到嵌入在 home.tpl 模板中的 PHP 代码,结合动态生成的 outofstock CSS 样式类,根据可用数量来更改外观:

<?php 
    foreach($prints as $print) {  
?>
   <div class="preview <?php if ($print->QUAN < 1) echo 'outofstock' ?>">
        <a href="printdesc?id=<?php echo $print->ID ?>"  
             <?php if ($print->QUAN < 1) echo "class='outofstock'"  ?> >
                   <?php echo $print->TITLE ?><br>
              <img src="/static/images/<?php echo $print->IMGSRC ?>" 
                     class="thumb"/>
          </a>
     </div>
<?php
	}
?>

请注意,本教程中将印刷品的图像存储为文件,以保持简单。但在生产环境中,它们应该和数据一起存储在数据库中 — 存储在 Bluemix 提供的一个可靠的对象存储服务上更好一些。

其他 Bluemix 服务

 

除了 SQL Database 服务之外,Bluemix 还提供了许多有趣的服务,它们可以给您的应用程序增添价值和特性。例如,IBM Watson 的许多学习和认知功能 现在都能够以 Bluemix 服务的形式提供。您可能想浏览 Bluemix 服务目录,想象您可以添加到已部署的 Web 应用程序中的所有新特性。

测验

 

测试您在本教程中学到的知识。答案在下方。

  1. Bluemix 上的 SQL Database 服务获得了哪项技术的实际支持:
    1. Oracle 数据库
    2. MySQL 数据库
    3. Elasticsearch
    4. IBM DB2
    5. IBM Cloudant
  2. 本教程中使用的 IBM DB2 访问库名为:
    1. hyperbase
    2. 高性能关系访问
    3. mysql_cli
    4. PHP SQL 数据库驱动程序
    5. ibm_db2
  3. DDL 的全称是:
    1. Data Declaration Language
    2. Data Definition Language
    3. Directed Database Language
    4. Database Declaration Language
    5. DB2 Database Library
  4. 本教程没有像 前一篇教程 一样将传入的请求定向到 4 个模板,而是利用了一些模板:
    1. 1
    2. 2
    3. 3
    4. 4
  5. 通过 Bluemix SQL 数据库控制台,您可以:
    1. 将数据从 Excel 电子表格导入到 SQL 表中
    2. 查看加载到表中的数据
    3. 对加载到表中的数据运行查询
    4. 查看 SQL 表的模式定义
    5. 上述所有选项

测验的答案

1. d,2. e,3. b,4. b,5. e

 

结束语

 

在本教程中,您:

  • 创建了一个 Bluemix SQL Database 服务实例
  • 将该 SQL 数据库实例绑定到了一个 Web 应用程序
  • 使用 PHP 和 ibm_db2 模块在 SQL 数据库中创建了表并填充了行
  • 配置了一个 Web 应用程序来使用 SQL Database 服务实例
  • 通过 Bluemix SQL 数据库控制台管理了一个 SQL 数据库并查看了数据
  • 学习了如何创建数据驱动的动态 Web 应用程序

本教程是 developerWorks 上的 “Bluemix 基础” 教程系列的最后一篇!如果您已经完成了所有这些教程,那么您已经出师了!

要获取稳定的教程和技术资源流来帮助您继续使用 Bluemix 进行学习、开发和连接,请参阅 developerWorks 上的 Bluemix 页面


    
正文到此结束
Loading...