用PHP访问Predix PostgreSQL数据库

作者:唐翊国,开发者生态资深经理,GE数字集团

23年工作经验,长期在杜邦、欧文斯科宁、庄信万丰等从事制造业信息化工作,规划、实施了大量MES、SAP ERP、LIMS、BPM等项目,积累了丰富的制造业数字化转型经验。

 

如果您还没有Predix试用帐号,请访问

https://supportcentral.ge.com/esurvey/GE_survey/takeSurvey.html?form_id=18446744073709715720

申请。请务必准确提供您的信息,我们会以邮件方式通知您注册结果。

 

如果您使用Windows操作系统,请参考http://blog.csdn.net/predixcn/article/details/53967673系列文章设置您的开发环境。

如果您使用Linux操作系统,请参考http://blog.csdn.net/predixcn/article/details/54093234系列文章设置您的开发环境。

 

在文章http://blog.csdn.net/predixcn/article/details/70238562 中我们已经创建了一个PostgreSQL数据库和一个空表,本文将示例如何使用PHP语言来访问这个数据库。

在Predix上开发一个简单的PHP应用是非常容易的,

1. 创建一个文件夹,比如 C:\PxDev\php

2. 在这个文件夹里创建一个PHP文件,例如index.php

<?php

   echo"Welcome to Eagle's php demo application on Predix!";

   echo"<br />\n";

   echo"We'll explore how to access PostgreSQL on Predix.";

?>

3. 在同一个文件夹里创建一个manifest.yml文件:

applications:

- name: EaglePHPSQLOnPredix

 memory: 256M

 instances: 1

4. 命令行里运行

cf push

把这个应用部署到Predix云端。


5. 访问这个应用

https://eaglephpsqlonpredix.run.aws-jp01-pr.ice.predix.io/


有时候,看起来简单的事情,做起来也比想像中复杂。

起初我编写了一个简单的PHP文件“insert-pg.php”来执行一个简单的 “insert” SQL语句。

<?php

$dsn = "host=**** port=**** user=****password=**** dbname=****";

try

{

   $db= pg_connect($dsn);

   echo"Connected to the database successfully!";

   echo"<br />\n";

   $query= "INSERT INTO wechatmessage (message,customer) VALUES ('Hello','eagle tang')";

   $result= pg_query($db,$query) or die('Query failed: ' . pg_last_error());

   $cmdtuples= pg_affected_rows($result);

   echo$cmdtuples . " rows are affected.\n";

   pg_close($db);

}

catch (PDOException $e)

{

   echo$e->getMessage();

}

?>

我把这个文件部署到Predix云端,执行它,可什么事情也没有发生,没有出错信息,也没有预想的结果,我以为是代码里有问题,比如dsn语句或者insert sql语句等,可反复看也找不出错误。

我花了不少时间查找资料,但当时都一无所获,后来无意中发现PHP提供一个简单但功能强大的函数来检查运行时环境,这个函数就是phpinfo()。我意识到如果我的代码没有问题,那么问题可能是PHP运行环境导致的。于是我专门做了一个小PHP文件ShowPHPInfo.php来捕获运行环境信息,其实很简单:

<?php

      phpinfo();

?>

部署到Predix云端,

cf push

访问

https://eaglephpsqlonpredix.run.aws-jp01-pr.ice.predix.io/ShowPHPInfo.php

啊哈,这下可以清楚地看到PHP在Predix上的运行环境了


如果我们浏览一下这些环境信息,会发现没有出现PostgreSQL的连接驱动信息,这说明默认情况下Predix的PHP Buildpack没有提供对PostgreSQL访问连接的支持。一旦明白这点,通过互联网查询相关主题,我就找到了答案:我们要增加一个额外的配置文件composer.json来管理PHP运行环境。

具体来看一下composer.json的内容:

{

 "name": "EaglePhPSqlOnPredix/EaglePhPSqlOnPredix",

 "description": "EaglePhPSqlOnPredix is a Demo ofPHP+PosgreSQL.",

 "type": "Application",

 "license": "GPL-2.0+",

 "require": {

   "php": "5.5.*",

   "ext-mbstring": "*",

   "ext-pgsql": "*",

   "ext-mcrypt": "*",

   "ext-pdo": "*",

   "ext-pdo_pgsql": "*",

   "cloudfoundry-community/cf-helper-php": "1.4.*",

   "monolog/monolog": "~1.13"

  },

 "minimum-stability": "stable",

 "autoload": {

  }

}

增加好composer.json ,重新部署应用到Predix云端,再次运行ShowPHPInfo.php,我们就可以看到明显的区别了,一些PDO 和PostgreSQL的模块被加载进入了PHP的运行环境:


现在再运行“insert-pg.php” ,wow,可以正常工作了!


因此我建议在做云端PHP开发时,增加这个简单的ShowPHPInfo.php 文件捕获PHP运行环境,可能会提供更多有用的细节来帮助排错。

 

在使用中您有任何问题,请访问我们的论坛http://bbs.csdn.net/forums/GEPredix

GE数字集团的技术专家们会在线回答您的问题。

也请访问我们在CSDN的Predix专区http://predix.csdn.net/ 了解更多Predix的内容和相关活动。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值