我正在尝试在platform.sh上设置Microsoft ODBC驱动程序,以便我可以使用PDO_SQLSRV和SQLSRV PHP扩展。 apt和其他sudo命令是有限的。但是,在构建期间,我可以设置环境变量,例如LD_LIBRARY_PATH。
这是我到目前为止所尝试的内容。
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
启动时,我仍然会看到上面显示的错误。
答案 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');
您可能会发现两个驱动程序的特征略有不同,因此请使用对您正在使用的查询最可靠的驱动程序。