热门标签 | 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


    推荐阅读
    • 包含phppdoerrorcode的词条 ... [详细]
    • PHP函数的工作原理与性能分析
      在编程语言中,函数是最基本的组成单元。本文将探讨PHP函数的特点、调用机制以及性能表现,并通过实际测试给出优化建议。 ... [详细]
    • 在运行于MS SQL Server 2005的.NET 2.0 Web应用中,我偶尔会遇到令人头疼的SQL死锁问题。过去,我们主要通过调整查询来解决这些问题,但这既耗时又不可靠。我希望能找到一种确定性的查询模式,确保从设计上彻底避免SQL死锁。 ... [详细]
    • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
    • 最近遇到了一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。希望各位大神能够提供帮助。 ... [详细]
    • centos 7.0 lnmp成功安装过程(很乱)
      下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
    • Ubuntu 22.04 安装搜狗输入法详细指南及常见问题解决方案
      本文将详细介绍如何在 Ubuntu 22.04 上安装搜狗输入法,并提供常见问题的解决方法。包括下载安装包、更新源、安装依赖项等步骤。 ... [详细]
    • 周排行与月排行榜开发总结
      本文详细介绍了如何在PHP中实现周排行和月排行榜的开发,包括数据库设计、数据记录和查询方法。涉及的知识点包括MySQL的GROUP BY、WEEK和MONTH函数。 ... [详细]
    • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
    • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
    • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
    • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
    • 如何使用R语言高效连接并操作MySQL数据库
      如何使用R语言高效连接并操作MySQL数据库 ... [详细]
    • web页面报表js下载,web报表软件 ... [详细]
    • 在移动端开发中,多点触控手势是提升用户体验的重要手段。然而,目前只有iOS浏览器原生支持手势事件,其他设备需要通过touchstart、touchmove和touchend等基础事件进行自定义实现。本文将详细介绍如何在Vue项目中实现多点触控手势。 ... [详细]
    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社区 版权所有