研究了一个下午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和默认配置不一样的话,都要在这里把不一样的配置参数写出来。