欢迎各位兄弟 发布技术文章
这里的技术是共享的
代码见最下面
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
的源码,然后解压。
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
版本:
以上版本选择的内容来自 freetds
的官方文档,文档地址:https://www.freetds.org/userguide/ChoosingTdsProtocol.html
freetds
依次执行以下命令来初始化 freetds
配置:
echo "/usr/local/freetds/lib/" > /etc/ld.so.conf.d/freetds.conf
ldconfig
其他的配置不需要,网上有一些教程写要在 freetds.conf
中配置 MSSQL
的连接信息。其实大可不必,在调用的时候配置就可以了,也就是在 PHP
代码中配置,这样多灵活。
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
的用户名和密码。
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
一样,这里不再赘述。
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();
}
?>