无法将 PHP 连接到 bluemix 中的 db2
Unable to connect PHP to db2 in bluemix
我对 PHP 编程和 bluemix 也很陌生。我正在寻找连接到 PHP 到 bluemix。为此,我在 Bluemix 中创建了 SQL DB(DB2 数据库)并将其绑定到我的应用程序。然后获取凭据并在 php using db2_connect()
中使用它。它没有工作并返回连接失败。
之后我得到了这个:
$vcap_services = json_decode($_ENV["VCAP_SERVICES" ]); $db = $vcap_services->{'mysql-5.5'}[0]->credentials; $mysql_database = $db->name; $mysql_port=$db->port; //$mysql_server_name ='${db->host}:${db->port}'; $mysql_server_name =$db->host . ':' . $db->port; $mysql_username = $db->username; $mysql_password = $db->password;
$con = mysql_connect($mysql_server_name, $mysql_username, $mysql_password);
我的问题是,我应该用 db2 替换 mysql 吗?或者它将 运行 像这样只是将 mysql-5.5 更改为 sqldb?
我也用过db2_connect
,但没用。
您不应使用 $mysql_connect
,这是 MySQL 特有的。使用 $db2_connect
,参考 the docs。
此外,您很可能使用了错误的凭据(或者:改为使用空对象)。从您的 Bluemix 控制台检查服务名称(在您的应用程序屏幕中展开服务实例下的服务凭证):它们很可能是 而不是 "mysql-5.5"。我建议您只将 $vcap_services
打印到控制台或作为 HTML 中的调试输出,然后查看获得正确 server/port/user/password.
的效果如何
要连接到 Bluemix 中的 SQLDB 服务,您必须使用 db2_connect
而不是 mysql_connect
,文档是 here。由于这是一个远程数据库,因此您必须使用连接字符串而不是单独的 databaseName、userName 参数。
这里是如何解析 VCAP_SERVICES 并连接到 PHP 中的 SQLDB 服务的示例:
# Decode JSON and gather DB Info
$services_json = json_decode($json,true);
$sqldb = $services_json["sqldb"];
if (empty($sqldb)) {
echo "No sqldb service instance is bound. Please bind a sqldb service instance";
return;
}
$sqldb_config = $services_json["sqldb"][0]["credentials"];
// create DB connect string
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=".
$sqldb_config["db"].
";HOSTNAME=".
$sqldb_config["host"].
";PORT=".
$sqldb_config["port"].
";PROTOCOL=TCPIP;UID=".
$sqldb_config["username"].
";PWD=".
$sqldb_config["password"].
";";
// connect to database
$conn = db2_connect($conn_string, '', '');
我对 PHP 编程和 bluemix 也很陌生。我正在寻找连接到 PHP 到 bluemix。为此,我在 Bluemix 中创建了 SQL DB(DB2 数据库)并将其绑定到我的应用程序。然后获取凭据并在 php using db2_connect()
中使用它。它没有工作并返回连接失败。
之后我得到了这个:
$vcap_services = json_decode($_ENV["VCAP_SERVICES" ]); $db = $vcap_services->{'mysql-5.5'}[0]->credentials; $mysql_database = $db->name; $mysql_port=$db->port; //$mysql_server_name ='${db->host}:${db->port}'; $mysql_server_name =$db->host . ':' . $db->port; $mysql_username = $db->username; $mysql_password = $db->password;
$con = mysql_connect($mysql_server_name, $mysql_username, $mysql_password);
我的问题是,我应该用 db2 替换 mysql 吗?或者它将 运行 像这样只是将 mysql-5.5 更改为 sqldb?
我也用过db2_connect
,但没用。
您不应使用 $mysql_connect
,这是 MySQL 特有的。使用 $db2_connect
,参考 the docs。
此外,您很可能使用了错误的凭据(或者:改为使用空对象)。从您的 Bluemix 控制台检查服务名称(在您的应用程序屏幕中展开服务实例下的服务凭证):它们很可能是 而不是 "mysql-5.5"。我建议您只将 $vcap_services
打印到控制台或作为 HTML 中的调试输出,然后查看获得正确 server/port/user/password.
要连接到 Bluemix 中的 SQLDB 服务,您必须使用 db2_connect
而不是 mysql_connect
,文档是 here。由于这是一个远程数据库,因此您必须使用连接字符串而不是单独的 databaseName、userName 参数。
这里是如何解析 VCAP_SERVICES 并连接到 PHP 中的 SQLDB 服务的示例:
# Decode JSON and gather DB Info
$services_json = json_decode($json,true);
$sqldb = $services_json["sqldb"];
if (empty($sqldb)) {
echo "No sqldb service instance is bound. Please bind a sqldb service instance";
return;
}
$sqldb_config = $services_json["sqldb"][0]["credentials"];
// create DB connect string
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=".
$sqldb_config["db"].
";HOSTNAME=".
$sqldb_config["host"].
";PORT=".
$sqldb_config["port"].
";PROTOCOL=TCPIP;UID=".
$sqldb_config["username"].
";PWD=".
$sqldb_config["password"].
";";
// connect to database
$conn = db2_connect($conn_string, '', '');