问题:
需要从 PHP 代码访问并执行 MSSQL 存储过程。
版本详细信息:
本地开发机器 -Windows 10,带有 XAMPP 和 PHP 7
生产系统 -带有 PHP 5.3.2 的 Amazon AWS AMI Linux
我的要求是:
想要使用 odbc 连接访问我本地和实时服务器上的 MSSQL。
我对 LIVE 服务器的尝试:
想要确保 LIVE 服务器与包兼容并且能够正确安装所需的包。
因此,从以下步骤开始:
1)查看下面的链接,我发现我们需要使用 ODBC 来更快地访问数据: https://stackoverflow.com/a/31105561
2) 尝试在 Amazon Linux 上安装以下 ODBC 驱动程序,如下所示:
(假设 RHEL 6 安装程序也可以在 Amazon Linux 上运行。如果我错了,请告诉我)
- 适用于 SQL Server 的 Microsoft ODBC 驱动程序 13.1 - Windows + Linux
sudo su curl packages.microsoft.com/config/rhel/6/prod.repo > /etc/yum.repos.d/mssql-release.repo
出口
sudo yum remove unixODBC #避免冲突
sudo ACCEPT_EULA=Y yum 安装 msodbcsql-13.0.1.0-1 mssql-tools
但安装程序失败,显示以下错误:
Error: msodbcsql conflicts with unixODBC-utf16-2.3.1-1.x86_64
Error: Package: msodbcsql-13.1.4.0-1.x86_64 (packages-microsoft-com-prod)
Requires: unixODBC >= 2.3.1
Available: unixODBC-2.2.14-14.7.amzn1.i686 (amzn-main)
unixODBC = 2.2.14-14.7.amzn1
3)因此,尝试使用安装unixODBChttp://www.unixodbc.org/
- Downloaded the package via curl
- gunzip unixODBC*.tar.gz
- tar xvf unixODBC*.tar
然后,使用以下命令进行安装:
./configure
make
make install
4) 重新启动 httpd 服务并再次尝试步骤 2,但安装程序失败,并出现第 2 点中提到的相同错误。
我对本地机器的尝试:
- 下载了适用于 SQL Server 的 Microsoft ODBC Driver 13.1 - Windows + Linux 的 .msi 文件
- 在我的计算机上安装了相同的程序并重新启动了 xampp apache。但仍然
Uncaught PDOException: could not find driver
更新:通过在 php.ini 中添加扩展 dll 并重新启动服务器解决了本地系统中的问题。
有人能告诉我在 LIVE 配置中我错过了什么吗?
答案1
解决方法
由于安装的直接链接不起作用,因此使用以下命令下载了 rpm 文件进行离线安装:
sudo mkdir /tmp/RedHat6Packages
sudo curl https://packages.microsoft.com/rhel/6/prod/msodbcsql-13.1.4.0-1.x86_64.rpm > /tmp/RedHat6Packages/msodbcsql-13.1.4.0-1.x86_64.rpm
sudo curl https://packages.microsoft.com/rhel/6/prod/mssql-tools-14.0.4.0-1.x86_64.rpm > /tmp/RedHat6Packages/mssql-tools-14.0.4.0-1.x86_64.rpm
尝试使用以下命令进行离线安装:
cd /tmp/RedHat6Packages/
sudo yum localinstall msodbcsql-13.1.4.0-1.x86_64.rpm
sudo yum localinstall mssql-tools-14.0.4.0-1.x86_64.rpm
但仍然出现相同的错误:
error: Failed dependencies: libodbcinst.so.2()(64bit) is needed by msodbcsql-13.1.4.0-1.x86_64 unixODBC >= 2.3.1 is needed by msodbcsql-13.1.4.0-1.x86_64
找到检查包的命令:
sudo yum provides /usr/lib64/libodbcinst.so.2
这显示以下警告:
Loaded plugins: priorities, update-motd, upgrade-helper
2 packages excluded due to repository priority protections
unixODBC-2.2.14-14.7.amzn1.x86_64 : A complete ODBC driver manager for Linux
Repo : amzn-main
Matched from:
Filename : /usr/lib64/libodbcinst.so.2
unixODBC-utf16-2.3.1-1.x86_64 : ODBC driver manager with UTF16 character conversion enabled by default
Repo : packages-microsoft-com-prod
Matched from:
Filename : /usr/lib64/libodbcinst.so.2
直接跳到解决方案
检查了下面提到的链接:
通过编辑/etc/yum/pluginconf.d/priorities.conf
和设置禁用优先级enabled = 0
能够使用上述相同的命令安装驱动程序:
cd /tmp/RedHat6Packages/
sudo yum localinstall msodbcsql-13.1.4.0-1.x86_64.rpm
sudo yum localinstall mssql-tools-14.0.4.0-1.x86_64.rpm
仍然无法弄清楚扩展文件在哪里,但却产生了其他问题(在 Amazon EC2 Linux 上安装 MSSQL ODBC 13.1 后的后续步骤)作为这个问题的目的已经得到解决。
作为 Linux 的新手(尤其是从 Windows 迁移过来的),找到上述解决方案确实很困难。希望它能帮助到别人!
答案2
以下是适用于 Amazon Linux AMI 的命令:
curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/msprod.repo1
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel
sudo yum info unixODBC*
sudo yum install mssql-tools unixODBC-devel
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' | tee -a ~/.bash_profile && source ~/.bash_profile
来源:在 Linux 上安装 SQL Server 命令行工具 sqlcmd 和 bcp。
否则,请尝试安装不冲突的旧版本邮政例如
sudo ACCEPT_EULA=Y yum install msodbcsql-13.0.1.0-1 mssql-tools-14.0.2.0-1