zoukankan      html  css  js  c++  java
  • LNMP包环境下使用TP5框架通过ODBC连接MSSQL方案

    本文主要介绍了如何在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');
    }
  • 相关阅读:
    poj 3304 直线与线段相交
    poj 2318 叉积+二分
    AC自动机
    MySQL报错:Packets larger than max_allowed_packet are not allowed 的解决方案
    SCOPE_IDENTITY的作用
    Truncate table、Delete与Drop table的区别
    .Net Attribute特性
    vs2010 调试快捷键
    TFS和VSS的简单对比
    做网站用UTF-8还是GB2312 & 各国语言对应字符集
  • 原文地址:https://www.cnblogs.com/liuyi2614/p/8182017.html
Copyright © 2011-2022 走看看