无法使用PDO连接到MSSQL PHP7:unixODBC

时间:2018-06-13 15:27:27

标签: php pdo centos unixodbc pdo-odbc

首先,我道歉,因为我对Linux的经验很少,所以我可能不理解一些明显的东西。最终,我试图通过PHP查询MSSQL数据库。

我已经安装了freetds和unixODBC。我用tsql(freetds)和isql(unixODBC)确认了设置,一切正常。问题是当我尝试使用以下代码使用pdo从PHP连接时: $ db = new PDO('odbc:mssql','$ username','$ password');

我收到一个致命的PHP错误:未捕获的PDOException:找不到驱动程序...

经过进一步检查,我查看了我的PHP信息文件,可用的PDO驱动程序是:mysql和sqlite。我如何/在哪里获得PHP7的pdo odbc驱动程序?在PHP文档中,看起来驱动程序包含在PHP源代码中,但我看到的唯一选项是使用./configure,根据我的理解,这只是从源代码编译。

有没有办法将驱动程序添加到已编译的PHP7版本中?我觉得我错过了一些愚蠢的东西。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

其他PHP驱动程序应作为系统软件包安装,具体取决于您的Linux发行版。例如,使用Debian,您可以使用以下命令安装所需的包:

sudo apt-get install php7.1-odbc

至少,这将是正确道路上的一步。

答案 1 :(得分:1)

如果您的操作系统是UBUNTU

安装适用于Linux的unixODBC驱动程序管理器和Microsoft ODBC驱动程序

wget https://raw.githubusercontent.com/Microsoft/msphpsql/PHP-7.0-Linux/ODBC%20install%20scripts/installodbc_ubuntu.sh

运行安装程序

sh installodbc_ubuntu.sh

安装PHP依赖

apt-get install php-pear php-dev

安装sqlsrv(使用pecl search sqlsrv查看最新版本)

pecl install sqlsrv-4.0.5

安装pdo_sqlsrv(使用pecl search sqlsrv查看最新版本)

pecl install pdo_sqlsrv-4.0.5

加载扩展程序

echo "extension=sqlsrv.so" | sudo tee --append /etc/php/7.0/fpm/php.ini
echo "extension=pdo_sqlsrv.so" | sudo tee --append /etc/php/7.0/fpm/php.ini

重启PHP-FPM

service php7.0-fpm restart

适用于Windows https://docs.microsoft.com/en-us/sql/connect/php/loading-the-php-sql-driver?view=sql-server-2017

CentOS 7

sudo su
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
exit
sudo yum update
sudo ACCEPT_EULA=Y yum install -y msodbcsql mssql-tools unixODBC-devel 
sudo yum groupinstall "Development Tools"
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
echo "extension=sqlsrv" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
echo "extension=pdo_sqlsrv" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`

或通过yum看; https://webtatic.com/packages/php70/