php - 如何将 Bluemix 中的 PHP 应用程序转换为使用 SQL 数据库而不是 mySQL 数据库?

标签 php mysql db2 ibm-cloud

我一直在关注本教程:“Build and deploy a REST API on IBM Bluemix with PHP and MySQL 。”

本教程使用 mySQL。我想使用使用 DB2 的 SQL 数据库服务。本教程实现了一个 REST API。当我尝试使用这些链接进行 REST 调用时,我没有得到任何返回。

例如,下面是我如何使用我的 Bluemix 应用程序的 REST API:

我已经从下面的链接下载了源代码并编辑了 manifest.yml 给它一个唯一的名称和主机。我还尝试编辑 index.php 以连接到 SQL 数据库服务而不是 mySQL 数据库服务。

我的代码库在这里:vvaswani | products-api .

将源上传到 Bluemix 后,我使用以下查询在数据库中创建一个表:

CREATE TABLE products 
 (
  id INT,
  name VARCHAR(5),
  price decimal(5,2)
  );

我还使用以下查询填充数据库:

INSERT INTO products (id, name, price) VALUES
 (1, 'Garden spade', 15.99),
 (2, 'Cotton hammock', 54.50),
 (3, 'Single airbed', 35.49);

我将数据库绑定(bind)到我刚刚上传的应用程序(这是教程中的源代码)。但正如我上面所说,当我尝试访问 REST 端点时,我得到一个空白页面。我想我应该在我的网络浏览器中看到 JSON。所以我认为我的应用程序和数据库之间的连接有问题。

index.php 文件中,有一个部分指定了与 mySQL 数据库的连接。

// get MySQL service configuration from BlueMix
 $services = getenv("VCAP_SERVICES");
 $services_json = json_decode($services, true);
 $mysql_config = $services_json["mysql-5.5"][0]["credentials"];
 $db = $mysql_config["name"];
 $host = $mysql_config["host"];
 $port = $mysql_config["port"];
 $username = $mysql_config["user"];
 $password = $mysql_config["password"];

 // initialize Eloquent ORM
 $capsule = new Capsule;

 // use for BlueMix development
 $capsule->addConnection(array(
     'driver'    => 'mysql',
     'host'      => $host,
     'port'      => $port,
     'database'  => $db,
     'username'  => $username,
     'password'  => $password,
     'charset'   => 'utf8',
     'collation' => 'utf8_unicode_ci',
     'prefix'    => ''
 ));

我想我需要编辑它,但我不确定如何编辑。我尝试了一些东西。例如,将 $services_json["mysql-5.5"][0] 更改为 $services_json["sqldb"][0]。我还尝试将驱动程序从 driver' => 'mysql' 更改为 'driver' => 'sqldb'

我认为凭证可能很重要,所以它们在这里。 mySQL 凭据:

{
   "mysql-5.5": [
     {
       "name": "mysql-338",
       "label": "mysql-5.5",
       "plan": "100",
       "credentials": {
         "name": "d80979f54940b447ab178d6b2ea42a7f6",
         "hostname": "198.11.234.66",
         "host": "198.11.234.66",
         "port": 3307,
         "user": "uyhDjPNyxI357",
         "username": "uyhDjPNyxI357",
         "password": "XXXXXXXX",
         "uri": "mysql://uyhDjPNyxI357:pZoFBeIIg0i16@198.11.234.66:3307/d80979f54940b447ab178d6b2ea42a7f6"
       }
     }
   ]
 }

SQL 数据库凭据:

{
   "sqldb": [
     {
       "name": "SQL Database-78",
       "label": "sqldb",
       "plan": "sqldb_free",
       "credentials": {
         "port": 50000,
         "db": "SQLDB",
         "username": "user04128",
         "host": "75.126.155.153",
         "hostname": "75.126.155.153",
         "jdbcurl": "jdbc:db2://75.126.155.153:50000/SQLDB",
         "uri": "db2://user04128:dAxOPnUHTJ6G@75.126.155.153:50000/SQLDB",
         "password": "XXXXXXXX"
       }
     }
   ]
 }

似乎 mySQL 数据库凭据具有名称属性,该属性在索引中用于引用数据库。 SQL 数据库凭据具有 db 属性。所以我可能会同时尝试使用它。

抱歉发了这么长的帖子。这一切对我来说都是新的。

干杯。

最佳答案

如果您想在 Bluemix 上运行它(通过 Cloud Foundry),您将需要一个 PHP buildpack具有 DB2 驱动程序支持。这个应该有效:https://github.com/ibmdb/db2heroku-buildpack-php .

工作样本 here :

提示:要解决此类问题,请尝试使用 cf logs "APP_NAME"--recent 命令。阅读更多 here

关于php - 如何将 Bluemix 中的 PHP 应用程序转换为使用 SQL 数据库而不是 mySQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30117789/

相关文章:

php - 启用 PHP APC 查询缓存

php - laravel中如何根据表列值重定向不同的编辑页面?

MySQL/Maria 构建 View 将缩写与完整描述相匹配

mysql - 在没有 Intersect 的 MariaDB 中进行 Intersect 查询时出错

php - 转到带有重复按钮的 PHP 页面(提交数据)?

php - 按数组的一列从数据库查询中对数组进行排序

java - JBOSS服务器调用页面时出现错误

mysql - 如何在 MySQL、db2、Derby 或 Oracle 数据库中实现带有排序规则的 unicode 范式 C?

sql - DB2 将一个值增加一定数量

php - 使用路由 53 和一个实例在 AWS 上托管多个网站