第一种 方法:
在开发PHP程序时我们可以借助多种连接方式访问各类的数据库获取所需的数据。自PHP5以来PDO作为新生事物将所有数据库接口收入囊中,为开发人员提供了方便快捷的数据库读取方式。本文将介绍如何在Linux服务器配置PHP与SQL Server的连接。
下载PDO_DBLIB库PDO的各种库都可以在PECL中找到,例如,MySQL库:PDO_MYSQL、Oracle库:PDO_OCI。
作为SQL Server 的连接库,通过下面命令下载PDO_DBLIB:
wget http://pecl.php.net/get/PDO_DBLIB
安装PDO_DBLIB库
下载完成后通过PEAR安装:
/usr/bin/pear install PDO_DBLIB-1.0.tgz
# 安装出错了: ?如何处理呢?
# /usr/local/php/bin/pear install /root/PDO_DBLIB-1.0.tgz
6 source files, building
WARNING: php_bin /usr/local/php/bin/php appears to have a suffix /bin/php, but config variable php_suffix does not match
running: phpize
Cannot find config.m4.
Make sure that you run '/usr/local/php/bin/phpize' in the top level source directory of the module
ERROR: `phpize' failed
如果安装成功的话,/usr/lib64/php/modules(非64位主机应该在/usr/lib/...)目录中会多出pdo_dblib.so库(如下图)。下面需要将pdo_dblib.so库与php结合起来,进入/etc/php.d 并创建名为pdo_dblib.ini 的文件。在其中写入下面代码:
extension=pdo_dblib.so
重启Apache服务
service httpd restart
PHP测试
通过一段简单的代码测试能否正常连接MSSQL。利用PDO进行不同类型数据库访问时,只需修改PDO()中的连接参数即可其他调用函数相同,这样在开发时不会因数据库不同而调用不同的操作函数。
<?php $db = new PDO("dblib:host=myHost;dbname=myDB","myUserName","myPassword"); $sql = "select count(*) count from testTable"; $res = $db->query($sql); while ($row = $res->fetch()){ print_r($row); } $res = null; $db = null; ?>
第二种 方式:
在linux上配置 PHP+PDO-MSSQL 心得可是linux下就不是那么简单的事情.
有过linux下读写MSSQL数据库经验的朋友,对于freetds这个东西肯定不陌生. 配置相对也不复杂:
先到http://www.freetds.org/下载 源码包
$ cd /tmp
$ wgetftp://ftp.ibiblio.org/pub/Linux/ALPH...tds-stable.tgz
$ tar zxvf freetds-stable.tgz
$ ./configure --prefix=/usr/local/freetds
$ make
$ su root
Password:
$ make install
$cd ../php-5.2.5
$./configure --prefix=/usr/local/php
--with-apxs2=/usr/local/apache/bin/apxs
.... 其它参数
--with-mssql=/usr/local/freetds
make 并 make install
$ make
$ su root
Password:
# make install
# vim /usr/local/freetds/etc/freetds.conf
# A typical Microsoft SQL Server 7.0 configuration
;[MyServer70]
; host = 192.168.0.1
; port = 1433
; tds version = 7.0
tds version是SQLserver的版本,2000的是7.0 要是其它的版本,自己查查.
注意:[MyServer70] 非常重要. 将会在PHP代码中代替 mssql_connect("host","sa",""); 中的 host
关于freetds的其它如 ODBC/tsql/ 配置,请参考http://www.freetds.org/userguide/
好了,完成后重启WEB服务. PHPINFO里看看,应该有如图的信息:
再用如下代码测试:
<?php
$conn=mssql_connect("MyServer70","sa","password");
mssql_select_db('dbname',$conn);
$msquery="select firstname,lastname from table";
$msresults=mssql_query($msquery);
while ($row=mssql_fetch_array($msresults)) {
echo
"<li>".
$row['titleofcourtesy'] ." ".$row['firstname'] ." ".$row['lastname'] ."</li>n";
}
?>
如果有问题,查查配置文件是否正常,MSSQL服务器有没有开远程连接,防火墙等等.
到这里,MSSQL是可以用了.但感觉很不爽,PDO应该是PHP以后的标准.所以现在来搞定PDO-MSSQL:
因为有pdo-mysql配置经验,开始时我想当然的在编译PHP5时直接加参数--with-pdo-mssql=/usr/local/freetds
结果./configure时系统返回一个错误.
通过查看./configure --help 才知道,需要通过dblib来做.
$cd ../php-5.2.5
$./configure --prefix=/usr/local/php
--with-apxs2=/usr/local/apache/bin/apxs
.... 其它参数
--enable-pdo
--with-pdo-sqlite
--with-pdo-mysql=/usr/local/mysql/bin/mysql_config
--with-mssql=/usr/local/freetds
--with-pdo-dblib=//usr/local/freetds
$ make
$ su root
Password:
# make install
老习惯,代码验证:
<?php
try {
$hostname='192.168.0.1';//注意,这里和上面不同,要直接用IP地址或主机名
$port=1433;//端口
$dbname="dbname";//库名
$username="sa";//用户
$pw="password";//密码
$dbh= newPDO("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
echo"Failed to get DB handle: ".$e->getMessage() ."n";
exit;
}
echo'connent MSSQL succeed';
$stmt=$dbh->prepare("select firstname,lastname from table");
$stmt->execute();
while ($row=$stmt->fetch()) {
print_r($row);
}
unset($dbh); unset($stmt);
?>
2008.05.06更新:
如果读出来是乱码,请试试在/usr/local/freetds/etc/freetds.conf中找到[global]
在下面加一行
client charset = utf8