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

Posted

技术标签:

【中文标题】如何指向手动安装 Microsoft ODBC Driver 13【英文标题】:How to point to manual install Microsoft ODBC Driver 13 【发布时间】:2017-06-25 00:02:34 【问题描述】:

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

这是我迄今为止尝试过的。

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

我仍然收到以下错误:

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 启动时,我仍然看到上面显示的错误。

【问题讨论】:

【参考方案1】:

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

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

runtime:
    extensions:
        - mssql

更多信息请参见this page。

【讨论】:

不幸的是,对于 PHP > 5.6,必须手动安装 mssql。我正在使用 7.0【参考方案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');

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

【讨论】:

以上是关于如何指向手动安装 Microsoft ODBC Driver 13的主要内容,如果未能解决你的问题,请参考以下文章

找不到Microsoft Access Driver(*.mdb)ODBC驱动程序的安装例程。请重新安装驱动(转)

[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

SQLServer2000安装失败,[ODBC 驱动程序管理器]未发现数据源,详细信息请查看日志文件 sql2000 [Microsoft][ODBC 驱动程序管理器] 未发现数据源,参见sqlstp

sql2000安装失败,错误提示([Microsoft][ODBC SQL Server Driver][Shared Memory]SQL Server 不存在或?)

[navicat premium] [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

将节点 odbc 与 Microsoft Access 一起使用