欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

自己亲自做的 linux centos 7 php 5.6 sql server (mssql)之如何连接sqlserver mssql 数据库 安装 MSSQL 扩展 配置 有大用 有大大用 有大大大用 有大大大大用 有大大大大大用

代码见最下面 

1) 下载 freetds-0.91.49  (差不多版本就行了)

https://www.freetds.org/   https://www.freetds.org/software.html   https://www.freetds.org/files/   https://www.freetds.org/files/stable/  


cd /usr/local/src/

wget https://www.freetds.org/files/stable/freetds-0.91.49.tar.gz 

tar -zxvf freetds-0.91.49.tar.gz 


即,进入 /usr/local/src 目录(我一般习惯把编译用到的源代码放在这里),下载 freetds 的源码,然后解压。

2、安装 freetds

cd freetds-0.91.49/

./configure --prefix=/usr/local/freetds --with-tdsver=7.3 --enable-msdblib

make && make install


注意根据你自己下载的不同 freetds 版本,这里可能会有所不同,反正就是进入你解压出来得到的文件夹。然后 --with-tdsver=7.4 这里,根据 SqlServer 的不同版本灵活选择,具体可以参考下图自行选择,我使用的是 SqlServer 2008,所以选择的 7.3 版本:

image.png

以上版本选择的内容来自 freetds 的官方文档,文档地址:https://www.freetds.org/userguide/ChoosingTdsProtocol.html


3、配置 freetds

依次执行以下命令来初始化 freetds 配置:

echo "/usr/local/freetds/lib/" > /etc/ld.so.conf.d/freetds.conf

ldconfig

其他的配置不需要,网上有一些教程写要在 freetds.conf 中配置 MSSQL 的连接信息。其实大可不必,在调用的时候配置就可以了,也就是在 PHP 代码中配置,这样多灵活。

4、测试 freetds

执行以下命令来查看 freetds 版本:

# /usr/local/freetds/bin/tsql -C

Compile-time settings (established with the "configure" script)

                            Version: freetds v1.2

             freetds.conf directory: /usr/local/freetds/etc

     MS db-lib source compatibility: yes

        Sybase binary compatibility: no

                      Thread safety: yes

                      iconv library: yes

                        TDS version: 7.4

                              iODBC: no

                           unixodbc: no

              SSPI "trusted" logins: no

                           Kerberos: no

                            OpenSSL: yes

                             GnuTLS: no

                               MARS: yes


执行以下命令来测试 freetds 连接:  下面 看到 1>  ,  说明是连接正常的


# /usr/local/freetds/bin/tsql -H 192.168.0.23 -p 1433 -U username -P password

locale is "en_US.UTF-8"

locale charset is "UTF-8"

using default charset "UTF-8"

1> select @@version

2> go


Microsoft SQL Server 2012 - 11.0.2100.60 (X64)

Feb 10 2012 19:39:15

Copyright (c) Microsoft Corporation

Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)


(1 row affected)

其中 192.168.0.23 是 MSSQL 的 host 地址, username 和 password 分别是 MSSQL 的用户名和密码。




5、下载 PHP-5.6.30 源码

依次执行以下脚本:

cd /usr/local/src/

wget https://www.php.net/distributions/php-5.6.30.tar.gz

tar -zxvf php-5.6.30.tar.gz

和上面下载 freetds 一样,这里不再赘述。

6、安装 PHP-5.6.40-MSSQL 扩展

依次执行以下脚本:

cd php-5.6.30/ext/mssql/

/www/server/php/56/bin/phpize

./configure --with-php-config=/www/server/php/56/bin/php-config --with-mssql=/usr/local/freetds/

make && make install



7安装 unixODBC 等软件

  yum install unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel

  yum install php-odbc   php56-odbc



8编辑三个文件 

[root@js1p-es-web ~]# vim /etc/odbc.ini  ( 若没有这个文件,可以自己新建 )

[sqlserver]

Description     = sqlserver

Driver          = FreeTDS

ServerName      = 192.168.0.28

port            = 1433

Database        = ftp_database

TDS_Version     = 8.0



[root@js1p-es-web ~]# vim /usr/local/freetds/etc/freetds.conf

[sqlserver]

        host = 192.168.0.28

        port = 1433

        tds version = 8.0

        client charset = UTF-8



[root@js1p-es-web ~]# vim  /etc/odbcinst.ini

[AAFreeTDS]

Description     = FreeTDS driver

Driver          = /usr/local/freetds/lib/libtdsodbc.so

FileUsage       = 1

TDS_Version     = 8.0






下面是自己亲自做的程序例子


<?php
/**
* Created by PhpStorm.
* Date: 2023/10/5
* Time: 13:11
*/

$username = 'aaaaa';
$password = 'bbbbbbbbbb'; //记住,下面的参数  PORT=1433; 和 TDS_Version=8.0;是不能少的,否则会出问题
$dsn = "odbc:Driver={FreeTDS};Server=192.168.0.28;PORT=1433;Database=ftp_database;UID=aaaaa;PWD=bbbbbbbbbb;TDS_Version=8.0;";//
try {
   
$conn = new PDO($dsn);
   
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   
$sql = "SELECT * FROM   [ftp_database].[dbo].[Users]";
   
$stmt = $conn->prepare($sql);
   
$stmt->execute();
   
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
   
foreach($results as $key=>$value){
       
var_dump($value);
   }
   
echo "Your table has " . count($results) . " rows.\n";

   
echo 'Connected to the database successfully!';
}
catch (PDOException $e) {
   
echo 'Connection failed: ' . $e->getMessage();
}
?>




普通分类: