本文在CentOS 7 64bit和Laravel 4.2环境测试通过。

 

1.下载源码并解压缩

  1. wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-stable.tgz
  1. tar zxvf freetds-stable.tgz
  1. cd freetds-0.91

2.配置并生成makefile

  1. ./configure --with-tdsver=8.0 --enable-msdblib

3.编译安装

  1. make
  2. sudo make install

4.配置

默认安装的配置文件位于/usr/local/etc,在/usr/local/etc编辑freetds.conf 文件,默认为

  1. #   $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $
  2. #
  3. # This file is installed by FreeTDS if no file by the same
  4. # name is found in the installation directory.
  5. #
  6. # For information about the layout of this file and its settings,
  7. # see the freetds.conf manpage "man freetds.conf".
  8. # Global settings are overridden by those in a database
  9. # server specific section
  10. [global]
  11. # TDS protocol version
  12. ;       tds version = 4.2
  13. # Whether to write a TDSDUMP file for diagnostic purposes
  14. # (setting this to /tmp is insecure on a multi-user system)
  15. ;       dump file = /tmp/freetds.log
  16. ;       debug flags = 0xffff
  17. # Command and connection timeouts
  18. ;       timeout = 10
  19. ;       connect timeout = 10
  20. # If you get out-of-memory errors, it may mean that your client
  21. # is trying to allocate a huge buffer for a TEXT field.
  22. # Try setting 'text size' to a more reasonable limit
  23. text size = 64512
  24. # A typical Sybase server
  25. [egServer50]
  26. host = symachine.domain.com
  27. port = 5000
  28. tds version = 5.0
  29. # A typical Microsoft server
  30. [egServer70]
  31. host = ntmachine.domain.com
  32. port = 1433
  33. tds version = 7.0

在文件的最后位置添加如下配置,即可连接SQL Server 2000

  1. [sql-server-2000]
  2. host = 192.168.182.9
  3. port = 1433
  4. tds version = 7.0

如果要连接SQL Server 2005或2008,需要添加以下配置

  1. [sql-server-2005]
  2. host = 192.168.70.1
  3. port = 1433
  4. tds version = 8.0

4.测试

  1. /usr/local/bin/tsql -S sql-server-2000 -U sa -P test

如果成功连接,将会出现以下提示

  1. locale is "zh_CN.UTF-8"
  2. locale charset is "UTF-8"
  3. using default charset "UTF-8"
  4. 1>

至此,FreeTDS已经是Linux具备连接SQL Server的功能了。

5.编译PHP扩展

PHP 5.4之后已经没有原生支持的SQL Server的驱动了,因此需要手动编译PHP源码的扩展添加对SQL Server的驱动支持。CentOS 7自带的是5.4版本的PHP,因此我们通过编译5.4版的PHP源码获得扩展。

目前CentOS yum源里最新的php是5.4.16,php可以通过yum安装到系统

  1. sudo yum install php php-devel php-fpm php-common php-mysql php-pdo libzip

php官网上最新的5.4版本是 5.4.39,下载源码到本地

  1. wget http://cn2.php.net/distributions/php-5.4.39.tar.gz

解压并进入扩展目录

  1. tar zxvf php-5.4.39.tar.gz
  2. cd php-5.4.39/ext/mssql

使用phpize生成configure脚本文件

  1. phpize

生成makefile

  1. ./configure

编译

  1. make

编译之后将会在modules子目录生成mssql.so扩展文件。复制扩展文件到php的扩展文件目录

  1. sudo cp modules/mssql.so /usr/lib64/php/modules/

在/etc/php.d目录下新建mssql.ini 文件,输入以下内容

  1. ; Enable mssql extension module
  2. extension=mssql.so

这样PHP就能加载SQL Server驱动了。使用如下代码测试PHP连接SQL Server。

  1. <?php
  2. header("Content-type: text/html; charset=utf-8");
  3. $msdb=mssql_connect("sql-server-2000","sa","test");
  4. if (!$msdb) {
  5. echo "connect sqlserver error";
  6. exit;
  7. }
  8. mssql_select_db("msdb",$msdb);
  9. $result = mssql_query("SELECT top 5 * FROM employee", $msdb);
  10. while($row = mssql_fetch_array($result)) {
  11. var_dump($row);
  12. }
  13. mssql_free_result($result);
  14. ?>

代码中的数据库配置信息可以替换成别的。测试命令如下

  1. php -f test-mssql.php

成功执行后将会打印出数据库表中记录数据。

目前原生PHP代码已经可以连接SQL Server了,但是Laravel还是不行,还需要再编译生成一个pdo_dblib.so扩展驱动。

6.编译pdo_dblib.so扩展适配Laravel

  1. cd php-5.4.39/ext/pdo_dblib
  2. ./configure
  3. make
  4. sudo cp modules/pdo_dblib.so /usr/lib64/php/modules/

再到/etc/php.d下新建pdo_dblib.ini,输入以下内容

  1. ; Enable pdo_dblib extension module
  2. extension=pdo_dblib.so

再编辑Laravel的app/config/database.php文件,将sqlsrv区域改为一下形式

  1. 'sqlsrv' => array(
  2. 'driver'   => 'sqlsrv',
  3. 'host'     => 'sql-server-2000',
  4. 'database' => 'msdb',
  5. 'username' => 'sa',
  6. 'password' => 'test',
  7. 'prefix'   => '',
  8. ),

这样Laravel也可以连接SQL Server了。

Linux平台使用Freetds连接SQL Server服务器,兼容PHP和Laravel的更多相关文章

  1. Linux下用freetds执行SQL Server的sql语句和存储过程

    Linux下用freetds执行SQL Server的sql语句和存储过程 http://www.linuxidc.com/Linux/2012-06/61617.htm freetds相关 http ...

  2. 在非SQL客户端使用命令行方式定期连接SQL Server 服务器并模拟用户查询操作,同时输出信息内容

    一个很长的标题,实现的功能就是尽量使用非人力的方式模拟人去做一件事情,为了便于记录,将他们输出成文件方便查阅. 图形界面方式,使用微软自己的ConnMaker.exe,或者Microsoft 数据连接 ...

  3. 使用JDBC连接SQL Server

    源文:http://bbs.bc-cn.net/dispbbs.asp?boardid=12&id=140292 整理:秋忆 接触Java或者JSP,难免会使用到数据库SQL Server 2 ...

  4. JDBC连接SQL Server 2005步骤详解

    一.设置SQL Server服务器:    1.“开始” → “程序” → “Microsoft SQL Server 2005” → “配置工具” → “SQL Server Configurati ...

  5. Sql Server 服务器名称\实例名称 无法连接 Server Name\Instance Name

      解决步骤: 1:  Sql Server是否已经启动. 2:  检查Sql Server服务器是否开启TCP/IP协议. 侦听的默认端口为1433          3:     ping 数据库 ...

  6. Windows 2008服务器环境PHP连接SQL Server数据库的配置及连接方法

    背景: PHP程序常用的数据库是Mysql数据库,但是由于实际项目需要,要求PHP网站连接SQL Server数据库查询一些必要信息.因此,本文就来给大家介绍一下如何安装及配置PHP扩展,可以实现PH ...

  7. sql server 2008 64位连接sql 2000服务器的时候出现

    来源 https://blog.csdn.net/loeley/article/details/7095741 sql server 2008 64位连接sql 2000服务器的时候出现以下提示: 链 ...

  8. ASP .Net Core 在 CentOS8 ARM 下连接 SQL Server 2008 R2(Hypervisor)

    本文主要记录在 ARM 系统下无法连接SQL Server 2008 R2 的解决过程. 解决方案是使用 ODBC 的方式连接数据库,进行操作. 手上有公司的华为鲲鹏云计算 ARM 架构的 CentO ...

  9. php连接sql server

    这两天有个php连接sql server的项目,顺便学习学习sql server  说明: 1:PHP5.2.x本身有个php_mssql.dll的扩展用来连接Sql server,但是这个dll只是 ...

随机推荐

  1. JavaWeb对RSA的使用

    由于公司的网站页面的表单提交是明文的post,虽说是https的页面,但还是有点隐患(https会不会被黑?反正明文逼格是差了点你得承认啊),所以上头吩咐我弄个RSA加密,客户端JS加密,然后服务器J ...

  2. js 在表单提交前进行操作

    最近在写页面的时候,需要手动写一些在表单进行提交前的验证操作,正好看到了2种阻止表单提交的方法,可以进行一些逻辑处理 方法一:使用return false 原生js写法: <form id=&q ...

  3. centos6.8服务器配置之vsftpd配置

    vsftpd: version 2.2.2一.安装:因对版本要求不高,所以采用yum安装 yum install -y vsftpdckconfig vsftpd on 二.配置: 1.建立ftp用户 ...

  4. 转: 关于android 机型适配的问题

    转: http://www.csdn.net/article/2015-09-08/2825645

  5. java.util.HashMap 解析

    HashMap 是我们经常使用的一种数据结构.工作中会经常用到,面试也会总提到这个数据结构,找工作的时候,”HashTable 和HashMap的区别“被问到过没有? 本文会从原理,JDK源码,项目使 ...

  6. 算法笔记_160:算法提高 约数个数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 输入一个正整数N (1 样例输入 12 样例输出 6 样例说明 12的约数包括:1,2,3,4,6,12.共6个 2 解决方案 具体代码如下: im ...

  7. 算法笔记_105:蓝桥杯练习 算法提高 上帝造题五分钟(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 第一分钟,上帝说:要有题.于是就有了L,Y,M,C 第二分钟,LYC说:要有向量.于是就有了长度为n写满随机整数的向量 第三分钟,YUHC ...

  8. hdu 3572 Task Schedule(最大流&amp;&amp;建图经典&amp;&amp;dinic)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  9. Oracle中查询某字段不为空或者为空的SQL语句怎么写

    比如 insert into table a (a1,b1)values("a1",''); 对于这种情况,因为表里存的是'',其实是没有内容的,要查询这个字段,不能直接使用 se ...

  10. linux route命令使用

    说明:route命令是打印和操作ip路由表描述:route操作基于内核ip路由表,它的主要作用是创建一个静态路由让指定一个主 机或者一个网络通过一个网络接口,如eth0.当使用"add&qu ...