如何指向手动安装Microsoft ODBC Driver 13

时间:2017-02-07 16:26:36

标签: php pdo odbc sqlsrv

我正在尝试在platform.sh上设置Microsoft ODBC驱动程序,以便我可以使用PDO_SQLSRV和SQLSRV PHP扩展。 apt和其他sudo命令是有限的。但是,在构建期间,我可以设置环境变量,例如LD_LIBRARY_PATH。

这是我到目前为止所尝试的内容。

  1. 我下载了https://packages.microsoft.com/ubuntu/16.04/prod/pool/main/m/msodbcsql/并从包中提取了所有文件。
  2. 我将提取的文件复制到服务器
  3. 尝试:export LD_LIBRARY_PATH="($pwd):$LD_LIBRARY_PATH"LD_LIBRARY_PATH="($pwd):$LD_LIBRARY_PATH" /usr/sbin/php-fpm7.0
  4. 仍然,我收到以下错误:

    SQLSTATE[IMSSP]: This extension requires the Microsoft ODBC Driver 13
    for SQL Server to communicate with SQL Server. Access the following 
    URL to download the ODBC Driver 13 for SQL Server for x86: 
    http://go.microsoft.com/fwlink/?LinkId=163712
    

    更新

    执行LD_LIBRARY_PATH=$(pwd) ldd libmsodbcsql-13.1.so.4.0时,所有依赖项都得到满足。但是,当我使用LD_LIBRARY_PATH="$(pwd):$LD_LIBRARY_PATH" /usr/sbin/php-fpm7.0启动时,我仍然会看到上面显示的错误。

2 个答案:

答案 0 :(得分:3)

我的猜测是您的扩展程序链接到了错误的库。

那就是说,你不需要自定义扩展。您可以将其添加到.platform.app.yaml

runtime:
    extensions:
        - mssql

有关详细信息,请参阅this page

答案 1 :(得分:2)

使用FreeTDS代替您的MSSQL驱动程序。理想情况下,您需要sudo权限。尽管可以使用特定于用户的ODBC配置文件,但如果尚未安装基础软件,则仍需要安装基础软件。

sudo apt-get install freetds-common freetds-bin unixodbc tdsodbc php5-odbc php5-sybase

添加与/etc/freetds/freetds.conf

的连接
[global]
text size = 64512

[my_connection]
host = SQL_HOSTNAME
port = SQL PORT - possibly 1433 
tds_version = 7.2
encryption = required

将FreeTDS添加到ODBC驱动程序列表中:/etc/odbcinst.ini

[odbc]
Description     = ODBC driver
Driver          = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup           = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so

[FreeTDS]
Description     = FreeTDS
Driver          = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

最后将FreeTDS连接添加到ODBC配置:/etc/odbc.ini ServerName必须与FreeTDS中使用的连接匹配

[my_connection]
Driver          = FreeTDS
Description     = Uses FreeTDS configuration settings defined in /etc/freetds/freetds.conf
Servername      = my_connection
TDS_Version     = 7.2

[Default]
Driver          = FreeTDS

现在,您将能够将PDO与ODBC或FreeTDS驱动程序一起使用。

直接使用FreeTDS

$pdo = new PDO($'dblib:host=my_connection', 'username', 'password');

或通过FreeTDS使用ODBC

$pdo = new PDO('odbc=my_connection', 'username', 'password');

您可能会发现两个驱动程序的特征略有不同,因此请使用对您正在使用的查询最可靠的驱动程序。