您的位置:首页 > 运维架构 > Linux

在linux上配置 PHP+MSSQL、PDO-MSSQL

2011-04-06 14:31 309 查看
WIN下用PHP读写MSSQL很简单,装上MSSQL客户端,再编辑PHP.INI开个扩展extension=php_mssql.dll ,就OK了. PDO的支持也是如此: extension=php_pdo_mssql.dll

可是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


然后编译PHP

代码:
$cd ../php-5.2.5
$./configure --prefix=/usr/local/php
--with-apxs2=/usr/local/apache/bin/apxs
.... 其它参数
--with-mssql=/usr/local/freetds


(也可以用 --with-sybase=/usr/local/freetds)

make 并 make install

代码:
$ make
$ su root
Password:
# make install


配置freetds

代码:
# 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


把他们前面的冒号删除,把host改为你的MSSQL服务器主机名或IP地址.port改为自己的端口号,

tds version是SQLserver的版本,2000的是7.0 要是其它的版本,自己查查.

注意: [MyServer70] 非常重要. 将会在PHP代码中代替 mssql_connect("host","sa",""); 中的 host

关于freetds的其它如 ODBC/tsql/ 配置,请参考http://www.freetds.org/userguide/

好了,完成后重启WEB服务. PHPINFO里看看,应该有如图的信息:





再用如下代码测试:

PHP 代码:
<?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


重启apache 刷新phpinfo页面.多了这一项表示成功:

老习惯,代码验证:

PHP 代码:
<?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);

?>


输出正常..搞定!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: