Linux平台Thinkphp3.2.3使用PDO_DBLIB连接SQLServer

今天碰到一客户要求在Linux服务器上使用ThinkPHP连接另一台SQLServer(SQLServer 2012)服务器,网上教程很多,在此说明下遇到的问题及解决。

连接方式为使用FreeTds,可以去官网下载最新版,下载速度非常慢,以下提供网盘已经下载了的(版本:1.00.82):

链接:https://pan.baidu.com/s/1nwXvBFN 密码:a9c4

安装完FreeTds和mssql后,安装PDO扩展,进入PHP源码(版本:PHP5.6.33)ext/pdo文件夹,执行:

./configure --with-php-config=/usr/bin/php-config5.6 --enable-pdo=shared

然后是make&&make install

完成后进入 pdo_dblib执行同样的命令,完成后进入php.ini开启相应的扩展。

以下是遇到的问题:

1.安装pdo_dblib扩展时,提示Cannot find FreeTDS in known installation directories问题

解决办法是:在configure(第3921行)文件和config.m4(第16行)中找到如下部分:

  for i in /usr/local /usr; do
      if test -f $i/include/sybdb.h; then
        PDO_FREETDS_INSTALLATION_DIR=$i
        PDO_FREETDS_INCLUDE_DIR=$i/include
        break
      elif test -f $i/include/freetds/sybdb.h; then
        PDO_FREETDS_INSTALLATION_DIR=$i
        PDO_FREETDS_INCLUDE_DIR=$i/include/freetds
        break;
      fi

    done

将红色部分修改为你正确的freetds安装路径,如我修改为:  for i in /usr/local /usr/local/freetds; do........

2.安装时遇到Cannot find php_pdo_driver.h

此原因是未安装 pdo扩展的问题,转到PDO模块配置,安装完成即可。


3.Thinkphp中连接的修改:

修改位于ThinkPHP/Library/Db/Driver/Sqlsrv.class.php中对应的内容,修改为以下部分(红色部分注释删除,黄色部分修改):

    // PDO连接参数
    protected $options = array(
        PDO::ATTR_CASE              =>  PDO::CASE_LOWER,
        PDO::ATTR_ERRMODE           =>  PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_STRINGIFY_FETCHES =>  false,
        //PDO::SQLSRV_ATTR_ENCODING   =>  PDO::SQLSRV_ENCODING_UTF8,
    );

    /**
     * 解析pdo连接的dsn信息
     * @access public
     * @param array $config 连接信息
     * @return string
     */
    protected function parseDsn($config){
       // $dsn  =   'sqlsrv:Database='.$config['database'].';Server='.$config['hostname'];
         $dsn  =   'dblib:host='.$config['hostname'].';dbname='.$config['database'];
       /* if(!empty($config['hostport'])) {
            $dsn  .= ','.$config['hostport'];
        }*/

        return $dsn;

    }


修改完成后,原有项目即可运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值