本文主要介绍了如何在linux下使用php语言的thinkphp5框架通过pdo_odbc的方式连接MSSQL的方案步骤:
1.下载微软官方发布的ODBC驱动包
Red Hat 5/6:https://www.microsoft.com/en-us/download/details.aspx?id=36437 SUSE 11:http://www.microsoft.com/en-us/download/details.aspx?id=34687
2.安装unixODBC 2.3.0
tar xzf msodbcsql-11.0.2270.0.tar.gz cd msodbcsql-11.0.2270.0 ./build_dm.sh
按照提示完成最终安装
cd /tmp/unixODBC.13742.22290.7487/unixODBC-2.3.0; make install
3.安装Microsoft ODBC Driver 11 for SQL Server on Linux
./install.sh install
安装完成后,可通过语句进行测试,测试语句格式如下
sqlcmd -S 192.168.1.10 -U sa -P sa -d master -Q 'select "Hello World"'
4.安装pdo_odbc,此处扩展必须要和php版本对应,如下以lnmp一键包举例说明:
cd ~/lnmp1.4-full/src/ mv php-7.1.7.tar.bz2 ~/ cd ~ tar -jxvf php-7.1.7.tar.bz2 cd php-7.1.7/ext/pdo_odbc/ /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-odbc=unixODBC,/usr/ make&&make install
输出so文件路径,复制下来后粘贴到php.ini大约928行左右中
vim /usr/local/php/etc/php.ini
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/pdo_odbc.so
退出重启php-fpm
/etc/init.d/php-fpm restart
5.最后在需要访问mssql的model分组中加入Base.php如下
<?php namespace appoamodel; use thinkModel; class Base extends Model { protected $connection = [ // 数据库类型 'type' => 'sqlsrv', // 数据库连接DSN配置 'dsn' => 'odbc:Driver=ODBC Driver 11 for SQL Server;Server=192.168.1.100;database=dbname;', // 服务器地址 'hostname' => '192.168.1.100', // 数据库名 'database' => 'dbname', // 数据库用户名 'username' => 'sa', // 数据库密码 'password' => 'sa', // 数据库连接端口 'hostport' => '1433', // 数据库连接参数 'params' => [], // 数据库编码默认采用utf8 'charset' => 'gbk', // 数据库表前缀 'prefix' => '', ]; }
在需要访问此数据的model继承自此类即可
class ClassName extends Base
需要注意mssql默认是gbk,需要做默认转码
public function getFieldValueAttr($value) { return iconv('gbk', 'utf-8', $value); }
或是
public function getFieldValueAttr($value) { return mb_convert_encoding($value, 'UTF-8'); }