如何将 Bluemix 中的 PHP 应用程序转换为使用 SQL 数据库而不是 mySQL 数据库?
How can I convert a PHP application in Bluemix to use SQL Database instead of mySQL database?
我一直在关注这个教程:“Build and deploy a REST API on IBM Bluemix with PHP and MySQL。”
本教程使用 mySQL。我想使用 SQL 数据库服务,我认为它使用 DB2。本教程实现了一个 REST API。当我尝试使用这些 link 进行 REST 调用时,我在 return.
中什么也得不到
例如,下面是我如何使用我的 Bluemix 应用程序的 REST API:
- http://products-api-db2-test2-5.mybluemix.net/v1/products.json
- http://products-api-db2-test2-5.mybluemix.net/v1/products
我已经从下面的 link 下载了源代码并编辑了 manifest.yml
以给它一个唯一的名称和主机。我还尝试编辑 index.php
以连接到 SQL 数据库服务,而不是 mySQL 数据库服务。
我的代码库在这里:vvaswani | products-api。
将源上传到 Bluemix 后,我使用以下查询在数据库中创建了一个 table:
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);
我将数据库绑定到我刚刚上传的应用程序(这是教程中的源代码)。但正如我上面所说,当我尝试访问 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 属性。所以我可能会尝试同时尝试一下。
很抱歉 post。这一切对我来说都是新的。
干杯。
您需要为您的 PHP 框架安装 DB2 数据库引擎(它提供 SQLDB 服务)的驱动程序。
https://github.com/cooperl22/laravel-db2
然后您可以按照说明使用正确的驱动程序和新凭据连接到数据库。
如果您想 运行 在 Bluemix 上(通过 Cloud Foundry),您将需要 PHP buildpack with DB2 driver support. This one should work: https://github.com/ibmdb/db2heroku-buildpack-php。
工作样本here:
提示:要解决此类问题,请尝试使用 cf logs "APP_NAME" --recent
命令。阅读更多 here
您将使用的 'driver' 是 'ibmdb2' 而不是 'sqldb'。 Bluemix 中的 SQLDB 服务实际上是 IBM DB2,因此您需要使用 ibmdb2 驱动程序。
话虽如此,我不相信 eloquent (illuminate) 支持 DB2,因此您需要在 illuminate 中编写自己的连接器,或者您可以使用我认为支持 DB2 的类似 doctrine 的东西。
我一直在关注这个教程:“Build and deploy a REST API on IBM Bluemix with PHP and MySQL。”
本教程使用 mySQL。我想使用 SQL 数据库服务,我认为它使用 DB2。本教程实现了一个 REST API。当我尝试使用这些 link 进行 REST 调用时,我在 return.
中什么也得不到例如,下面是我如何使用我的 Bluemix 应用程序的 REST API:
- http://products-api-db2-test2-5.mybluemix.net/v1/products.json
- http://products-api-db2-test2-5.mybluemix.net/v1/products
我已经从下面的 link 下载了源代码并编辑了 manifest.yml
以给它一个唯一的名称和主机。我还尝试编辑 index.php
以连接到 SQL 数据库服务,而不是 mySQL 数据库服务。
我的代码库在这里:vvaswani | products-api。
将源上传到 Bluemix 后,我使用以下查询在数据库中创建了一个 table:
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);
我将数据库绑定到我刚刚上传的应用程序(这是教程中的源代码)。但正如我上面所说,当我尝试访问 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 属性。所以我可能会尝试同时尝试一下。
很抱歉 post。这一切对我来说都是新的。
干杯。
您需要为您的 PHP 框架安装 DB2 数据库引擎(它提供 SQLDB 服务)的驱动程序。
https://github.com/cooperl22/laravel-db2
然后您可以按照说明使用正确的驱动程序和新凭据连接到数据库。
如果您想 运行 在 Bluemix 上(通过 Cloud Foundry),您将需要 PHP buildpack with DB2 driver support. This one should work: https://github.com/ibmdb/db2heroku-buildpack-php。
工作样本here:
提示:要解决此类问题,请尝试使用 cf logs "APP_NAME" --recent
命令。阅读更多 here
您将使用的 'driver' 是 'ibmdb2' 而不是 'sqldb'。 Bluemix 中的 SQLDB 服务实际上是 IBM DB2,因此您需要使用 ibmdb2 驱动程序。
话虽如此,我不相信 eloquent (illuminate) 支持 DB2,因此您需要在 illuminate 中编写自己的连接器,或者您可以使用我认为支持 DB2 的类似 doctrine 的东西。