热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在linux上配置PHP+PDO-MSSQL心得

WIN下用PHP读写MSSQL很简单,装上MSSQL客户端,再编辑PHP.INI开个扩展extensionphp_mssql.dll,就OK了.PDO的支持也是如此:extension

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 代码:
$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
"
  • " .
    $row [ 'titleofcourtesy' ] . " " . $row [ 'firstname' ] . " " . $row [ 'lastname' ] . "
  • 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 代码:

    try {

    $hostname = '192.168.0.1' ; //注意,这里和上面不同,要直接用IP地址或主机名
    $port = 1433 ; //端口
    $dbname = "dbname" ; //库名
    $username = "sa" ; //用户
    $pw = "password" ; //密码
    $dbh = new PDO ( "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


    推荐阅读
    author-avatar
    霓Nin氵ini
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有