PHP 7.0/Yii 1/MS SQL Server 2008 : PHP is unable to find the driver

标签 php sql-server linux yii

简单说一下问题 当运行必须连接到我的 sql 服务器的 PHP 脚本(准确地说,Yii 1.1 ConsoleCommand)时,我得到了

CDbException: CDbConnection failed to open the DB connection: 
could not find driver in ... /CDbConnection.php:399

我确信我已经编译并安装了驱动程序并配置了 php.ini。

环境

$ php -version
PHP 7.0.13-0ubuntu0.16.04.1 (cli) ( NTS )

$  lsb_release  -d
Description:    Ubuntu 16.04.1 LTS

$ apachectl -V
Server version: Apache/2.4.18 (Ubuntu)

Yii 数据库配置

"sql_server_db" => array (
        'class'                 => "CDbConnection",
        'connectionString'      => 'dblib:host=SQL-SERVER;dbname=at6_rp',
        'enableParamLogging'    => false,
        'username'              => '<hidden>',
        'password'              => '<hidden>',
        'charset'               => 'utf8',
    ),

我有一个完全相同的 Yii 1 应用程序副本,在另一台装有旧版 Ubuntu 8 和 php 5.2 的机器上运行良好。所以我认为我的连接字符串是正确的。

Yii 代码 - 抛出错误的位置

See https://github.com/yiisoft/yii/blob/1.1.17/framework/db/CDbConnection.php#L382-L409

对于文档,我在这里报告我安装驱动程序的步骤

I followed instructions found here: https://github.com/Microsoft/msphpsql

第 1 步:安装 PHP 扩展

这里我避免安装 php7.0 因为我已经有了它

sudo su
apt-get update
apt-get -y install php7.0-fpm php-pear php7.0-dev mcrypt php7.0-mcrypt php-mbstring php7.0-xml re2c gcc g++

第 2 步:安装先决条件

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 mssql-tools 
sudo apt-get install unixodbc-dev-utf16 unixodbc-utf16 odbcinst1debian2-utf16 

我没有安装 apache,我已经安装了它。

步骤 4:安装适用于 SQL Server 的 Microsoft PHP 驱动程序

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv

以上行安装了 v4.0.8

步骤 5:将 Microsoft PHP Drivers for SQL Server 添加到 php.ini

echo "extension=/usr/lib/php/20151012/sqlsrv.so" >> /etc/php/7.0/apache2/php.ini
echo "extension=/usr/lib/php/20151012/pdo_sqlsrv.so" >> /etc/php/7.0/apache2/php.ini
echo "extension=/usr/lib/php/20151012/sqlsrv.so" >> /etc/php/7.0/cli/php.ini
echo "extension=/usr/lib/php/20151012/pdo_sqlsrv.so" >> /etc/php/7.0/cli/php.ini

我验证:这些行都在 apache2/php.inicli/php.ini

第6步:重新启动Apache以加载新的php.ini文件

sudo service apache2 restart

无论如何:问题仍然存在。当我运行 php 脚本时,我得到了

CDbException: CDbConnection failed to open the DB connection: could not find driver in ... cut .. /yii/framework/db/CDbConnection.php:399

更新1:

按照建议,我重新启动了php-fpm

sudo systemctl restart php7.0-fpm.service

不,错误,但连接问题仍然存在

最佳答案

通过简单的解决...

sudo apt install php7.0-sybase

无需添加更多配置,无需重新启动。

在这里找到:Linux - PHP 7.0 and MSSQL (Microsoft SQL) (但在这种情况下不是公认的答案)

关于PHP 7.0/Yii 1/MS SQL Server 2008 : PHP is unable to find the driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42159692/

相关文章:

sql - 使用 SQL Server 触发器在插入后更新另一个表中的列

一个应用程序可以处理N个accept连接并且每个accept使用一个独立的线程吗

编译单独的内核模块 (Debian/Ubuntu)

php - Laravel 路由组第二个参数?

javascript - 使用ajax调用php脚本不起作用

sql - 如何将单引号文本作为参数传递给sql server中的存储过程

linux - python3 为什么 print ("\r"+"text") 在 Linux 和 Windows 终端上不同

php - 防止dql进行实体连接

php - 根据 Woocommerce 中选择的付款方式禁用送货方式

sql - 将数据类型 varchar 转换为 float 时出错