研究了一个下午ThinkPHP2.0,终于弄明白了,却发现不支持DB2,有人说PDO可以用于连接DB2,我试过之后发现最新的ThinkPHP2.0的PDO驱动里面有很低级的bug,试了一晚上始终没有用PDO连上DB2。有可以用ThinkPHP+DB2开发的朋友请指教。

 

然后尝试CakePHP,下载最新的1.3发现里面没有DB2的驱动,去SVN地址check出来的代码是有的,放弃最新版,就用check出来的吧,版本号1.2.4.8284

我的配置是这样的,DB2安装在远程的服务器上,也是我们开发服务器,但是调试在本地。Apache+PHP+DB2。

参考http://krook.net/archives/180 database.php 配置,发现还是不可以,不知道是不是和我的环境有关。

还好可以trace到lib里面的PHP代码,看了看dbo_db2.php发现还有一个配置数组,还多了些参数:

 1     var $_baseConfig = array(
 2         'persistent'     => true,
 3         'login'         => 'db2inst1',
 4         'password'         => '',
 5         'database'         => 'cake',
 6         'schema'        => '',
 7         'hostname'        => '127.0.0.1',
 8         'port'            => '50001',
 9         'encoding'        => 'UTF-8',
10         'cataloged'        => true,
11         'autocommit'    => true
12     );

 

再往下看代码发现有两种连接数据库的办法:

 1         if ($config['cataloged']) {
 2             $this->connection = $connect($config['database'], $config['login'], $config['password']);
 3         } else {
 4             $connString = sprintf(
 5                 "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=%s;HOSTNAME=%s;PORT=%d;PROTOCOL=TCPIP;UID=%s;PWD=%s;",
 6                 $config['database'],
 7                 $config['hostname'],
 8                 $config['port'],
 9                 $config['login'],
10                 $config['password']
11             );
12             $this->connection = db2_connect($connString, '', '');
13         }

 

默认情况 $config['cataloged']为真,连接失败,将此值强制写入配置数据,搞定了,终于连上数据库了,呵呵,那就先用Cakephp玩玩吧。

贴出我的配置文件  database.php 给大家参考一下

 1     var $default = array(
 2         'driver' => 'db2',
 3         'persistent' => false,
 4         'hostname' => '123.456.789.012',
 5         'login' => 'db2inst1',
 6         'password' => 'password',
 7         'database' => 'CAKE',
 8         'port' =>50000,
 9         'cataloged' => false,
10         'prefix' => '',
11     );

 

 注意:如果你的DB2和默认配置不一样的话,都要在这里把不一样的配置参数写出来。