Ubuntu 16.04 PHP 7 和 Linux 上 SQL Server 的 Microsoft ODBC 驱动程序 - odbc_connect 未定义

Ubuntu 16.04 PHP 7 和 Linux 上 SQL Server 的 Microsoft ODBC 驱动程序 - odbc_connect 未定义

我是 Linux 新手。我配置了一台新的 Ubuntu 16.04 服务器,通过 Tasksel 添加了 LAMP,并添加了 PhpMyAdmin。我将我的 Web 应用程序添加到 html 文件夹,并运行了我的 MySQL 脚本。这部分工作正常。我有一个查询远程 SQL Server 的 PHP 页面。这就是我的问题所在:

我按照说明安装了 SQL Server ODBC 驱动程序:

https://msdn.microsoft.com/en-us/library/hh568454(v=sql.110).aspx

udo su 
sh -c 'echo "deb [arch=amd64]
https://apt-mo.trafficmanager.net/repos/mssql-ubuntu-xenial-release/xenial main" > /etc/apt/sources.list.d/mssqlpreview.list' 
sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
apt-get update 
apt-get install msodbcsql unixodbc-dev-utf16

SQL Server ODBC 未在 PhpInfo() 中列出。

当我访问包含远程 SQL Server 查询的页面时,我在 Apache2 错误日志中发现一个错误:

[Tue Nov 01 04:42:52.651772 2016] [:error] [pid 1306] [client ::1:33146]
PHP Fatal error: Uncaught Error: Call to undefined function odbc_connect() in /var/www/html/xxxxxxx.php:67\n
Stack trace:\n#0 {main}\n thrown in /var/www/html/xxxxxxx.php on line 67

我错过了什么?

答案1

我在 MSDN 中链接的 repo 中遇到了同样的问题。

您需要安装 php-odbc 包,该包需要一个与 Microsoft repo 中的库冲突的库。

我使用以下命令手动安装了驱动程序:

sudo apt-get -y install build-essential
cd /tmp/
wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.4.tar.gz
tar xvf unixODBC-2.3.4.tar.gz
cd unixODBC-2.3.4/
./configure --enable-gui=no --enable-drivers=no --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --sysconfdir=/etc
make
sudo make install

sudo apt-get install openssl libkrb5-3 libc6 e2fsprogs

cd /tmp/
wget http://download.microsoft.com/download/B/C/D/BCDD264C-7517-4B7D-8159-C99FC5535680/RedHat6/msodbcsql-11.0.2270.0.tar.gz
tar xvf msodbcsql-11.0.2270.0.tar.gz
cd msodbcsql-11.0.2270.0/
sudo bash install.sh install --force --accept-license

sudo ln -s /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /usr/lib/x86_64-linux-gnu/libcrypto.so.10
sudo ln -s /lib/x86_64-linux-gnu/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/libssl.so.10
sudo ln -s /usr/lib/x86_64-linux-gnu/libodbcinst.so.2.0.0 /usr/lib/x86_64-linux-gnu/libodbcinst.so.1

您现在可以在 /etc/odbc.ini 中输入您的连接并替换 IP 和密码。例如:

[test]
Driver = ODBC Driver 11 for SQL Server
Server = 192.168.1.2,1433
Database = TEST

并使用 PDO 访问:

$db = new PDO('odbc:test', 'USERNAME' 'PASSWORD');

答案2

按照在 Linux 和 macOS 上安装 Microsoft ODBC Driver for SQL Server页面中,Ubuntu 上建议的安装步骤如下:

sudo su 
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y apt-get install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install unixodbc-dev

然后确保odbc为你的 Apache 启用扩展,例如a2enmod odbc,然后通过以下方式检查:apache2ctl -M。如果你没有此扩展,请通过以下方式安装apt-get install php-odbcyum在 CentOS 的情况下使用)。

相关内容