从零迁移 Windows 平台下的 Wamp Server 迁移至 Linux 平台下的 Apache + PHP 环境(四)配置 ODBC + FreeTDS 连接到 MS SQL Server

一、测试 PHP 代码使用 odbc_connect() 连接数据库
我之前在 Windows 环境下装的 Wamp 最终连接的数据库是微软的 SQL Server 2008 R2 ,目前 Apache 和 PHP 已经安装完成,接下来需要测试是否能够在此环境中正常连接 SQL Server 数据库
切到 Apache 应用目录,写一个简单的测试连接代码

cd /usr/local/apache2/htdocs/
vim conn.php

编辑以下代码,并保存后访问 http://10.102.7.169/conn.php IP 根据个人服务器进行变更,切记不要往死了拷贝

<?php
        $conn = odbc_connect("Driver=SQLSERVER;Server=10.102.7.168;Port=1433;TDS_Version=8.0","sa","eip@0903Must") or die ("数据库bccccca");//链接数据库/

        $sql = "SELECT TOP 1000 [EmpId],[TypeID],[Role]  FROM [A_SP_TestAccount].[dbo].[Acc]  where empid=27727";
        $resultRo = odbc_exec($conn,$sql);
        while ( odbc_fetch_array($resultRo) )//开始设置数据
        {
                echo odbc_result($resultRo,"Role")."<br />";
        }
        odbc_close($conn);//关闭数据库链接
?>

在这里插入图片描述
提示连接失败了,我的 SQL Server 环境,Server IP 用户名和密码都是对的,唯一的问题可能就是 Driver ,现在去 Apache 下面看看日志。

more /usr/local/apache2/log/error_log

错误日志显示不能够使用 SQLSERVER 驱动去连接,现在没有安装其他的连接 MSSQL 的驱动,所以现在需要安装FreeTDS (FreeTDS 就是Linux 下 用于连接MS SQL Server 的免费ODBC 驱动),然后去和 unixODBC 进行联合使用

[Wed Jul 10 14:55:01.885696 2019] [php7:warn] [pid 6529:tid 140186348365568] [client 10.101
.96.207:55587] PHP Warning:  odbc_connect(): SQL error: [unixODBC][Driver Manager]Can't ope
n lib 'SQLSERVER' : file not found, SQL state 01000 in SQLConnect in /usr/local/apache2/htd
ocs/conn.php on line 2

二、安装 FreeTDS
从此地址:https://www.freetds.org/ 下载 FreeTDS 的安装包

cd /root/
tar -zxvf freetds-stable-0.9.tgz
cd freetds-0.91/

/usr/local 是我的 unixODBC 安装目录(这个安装目录与安装方式有关,具体情况视个人情况而定)

./configure \
--prefix=/usr/local/freetds \
--with-tdsver=8.0 \
--enable-msdblib \
--enable-shared \
--enable-static \
--with-unixodbc=/usr/local

一般安装 FreeTDS 不会有报错,我安装过很多次还没有遇见过有什么异常

make && make install

三、配置并测试 FreeTDS
至此,unixODBC 和 FreeTDS 都安装完成,(unixODBC 在我安装 PHP 前的时候已经预备装好了,可以在上一篇博客中 https://blog.csdn.net/sunsun778/article/details/93871882 查看到,unixODBC + FreeTDS 组合建议优先安装 unixODBC,优先安装 unixODBC 是因为在接下来安装 FreeTDS 时配置连接 unixODBC 路径,会生成 libtdsodbc.so 这个文件,没有这个文件,我配置过是不成功的)
现在安装完成,开始测试配置是否能连接成功,首先编辑 FreeTDS 配置文件

vim /usr/local/freetds/etc/freetds.conf

添加以下测试信息到最后一行后,其中 host 为数据库实例 IP ,端口一般 SQL Server 是1433,如果开了 Browser 或者设定了特定端口,具体视情况而定,而字符一般设置为 UTF-8 即可

[ConnectTest]
       host = 10.102.7.168
       port = 1433
       tds version = 8.0
       client charset = UTF-8

保存退出之后,使用 tsql 进行测试

/usr/local/freetds/bin/tsql -S ConnectTest -U sa -P eip@0903Must

回车之后,出现下列提示说明正常连接,如果出现数字一直自增,表示实例连接失败,检查配置。若果提示字符集问题,则配置 client charset 大于或等于服务端数据库使用的字符集即可。

[root@localhost bin]# /usr/local/freetds/bin/tsql -S ConnectTest -U sa -P eip@0903Must
locale is "zh_CN.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1>

命令提示出来之后,输入一个查询进行测试看是否能正常查出想要的数据,这里是使用 go 进行运行 SQL,测试如下

1> SELECT TOP 1000 [EmpId],[TypeID],[Role]  FROM [A_SP_TestAccount].[dbo].[Acc]  where empid=27727
2> go
EmpId   TypeID  Role
27727   8       ;系统管理员;栏目管理员
27727   20      ;会议室管理员
(2 rows affected)

四、配置并测试 unixODBC + FreeTDS 组合使用是否正常
至此,FreeTDS 配置完成状态正常,可以正常使用,现在配置 unixODBC 组合 FreeTDS,首先需要找到 odbcinst.ini(注册 FreeTDS 驱动) 和 odbc.ini (测试驱动使用是否正常),使用 odbcinst -j 找到配置文件

[root@localhost ~]# odbcinst -j
unixODBC 2.3.0
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

主要的是 /usr/local/etc/odbcinst.ini 和 /usr/local/etc/odbc.ini
在 odbcinst.ini 去注册驱动

vim /usr/local/etc/odbcinst.ini

加入以下信息

[SQLSERVER]
Description     = SQL Server driver
Driver          = /usr/local/freetds/lib/libtdsodbc.so
Setup           = /usr/local/freetds/lib/libtdsodbc.so
FileUsage       = 1
Port            - 1433
TDS_Version     = 8.0

保存退出后,注册完毕,现在编辑 odbc.ini 进行连接测试

vim /usrl/local/etc/odbc.ini

加入以下信息

[mssql]
Description     = sqlserver connection
Driver          = SQLSERVER
TDS_Version     = 8.0
Server          = 10.102.7.168
Port            = 1433

保存退出后,用 isql 进行测试,“-v”,可以显示异常(如果出错)

isql mssql sa eip@0903Must -v

提示以下信息表示连接正确,可以使用,如果提示其他信息,说明报错了,可能配置不正确,最主要的配置是使用的驱动关系(odbc.ini 使用 odbcinit.ini)

[root@localhost ~]# isql mssql sa eip@0903Must -v
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

六、测试使用 odbc_connect 连接 MS SQL Server
保存后现在一切准备就绪,重新访问 http://10.102.7.169/conn.php ,出现我想要的数据表示成功使用 odbc_connect 通过 FreeTDS 连接到 MS SQL Server。
关于 conn.php 里面的 odbc_connect 配置,多种多样,完全可以自己根据 odbcinst.ini 里面注册驱动的其他配置进行组合更改。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值