一、测试 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 里面注册驱动的其他配置进行组合更改。