Linux中的PHP7用FreeTDS远程连接MSSQL数据库

最近有个需求,想用linux的PHP程序远程连接读写sql server 2008中的数据,折腾了一晚上,终于弄好了用FreeTDS连接的方式。

另:php-pdo-sqlsrv这种方式没有成功,留个坑吧,回头再填。

客户端环境:CentOS 7.5+PHP 7.2

远程数据库:Windows 2012 + Sql server 2008

一 、编译安装FreeTDS

1、下载

wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz

2、解压编译

tar xvf freetds-patched.tar.gz

cd freetds-1.00.107

./configure –prefix=/data/freetds –with-tdsver=7.4 –enable-msdblib

make

make install

3、修改配置,在/data/freetds/etc/freetds.conf文件最后添加:

[MSSQL]
host = 192.168.1.110
port = 1433
tds version = 7.4
client charset = UTF-8

4、测试连接

tsql -S 192.168.1.110 -U sa -P 密码

出现1>,说明连接成功,mssql命令测试一下

use master

go

select * from sysdatabases

go

可以看到所有数据库

二、PHP7编译安装添加dblib支持,PHP编译参数添加以下即可:

–with-pdo-dblib=/data/freetds

make ; make install

php -i|grep dblib

systemctl restart php-fpm

三、PHP连接测试

先用命令创建一个测试数据库(https://www.microsoft.com/en-us/sql-server/developer-get-started/php/rhel/step/2.html):

tsql -S 192.168.1.110 -U sa -P 密码

CREATE DATABASE SampleDB
go
use SampleDB
go
CREATE SCHEMA TestSchema
go
CREATE TABLE TestSchema.Employees (Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY, Name NVARCHAR(50), Location NVARCHAR(50))
go
INSERT INTO TestSchema.Employees (Name, Location) VALUES (N'Jared', N'Australia'), (N'Nikita', N'India'), (N'Tom', N'Germany')
go
SELECT * FROM TestSchema.Employees
go

PHP代码(test.php):

<?php
try {
       $host = “192.168.1.110”;
       $port = ‘1433’;
       $dbname = “SampleDB”;
       $username = “sa”;
       $pw = “你的密码”;
       $dbh = new PDO (“dblib:host=$host:$port;dbname=$dbname”,”$username”,”$pw”);
} catch (PDOException $e) {
       echo “Failed to get DB handle: ” . $e->getMessage() . “\n”;
       exit;
}
$stmt = $dbh->prepare(“SELECT top 1 * FROM TestSchema.Employees”);
$stmt->execute();
while ($row = $stmt->fetch()) {
       var_dump($row);
}
unset($dbh); unset($stmt);

测试一下:

php test.php

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据