将Laravel连接到SQL Server (sqlsrv)。[PDOException] 找不到驱动程序。

18

简介。我的Laravel应用程序以前使用MySQL,现在需要在我所在公司的网络上进行托管(我是远程工作者)。这个公司使用Microsoft技术,因此我需要将Laravel集成到他们的SQL Server中。

我在我的.env文件中有以下配置:

DB_CONNECTION=sqlsrv
DB_HOST=ip.address.of.server
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=my_username
DB_PASSWORD=my_password

使用php artisan migrate之后出现错误:

  [PDOException]
  could not find driver

我正在使用Ubuntu,这是专门为我(来自我的雇主)提供的远程机器。之前我曾尝试在我的laravel应用程序中使用sql server(使用我的Windows PC)。据我记得,我修改了xampp php.ini中的一些文本内容。作为一个新手Linux用户,对我来说太难了(因为我只使用CLI)。

编辑后的版本:

所以我已经从Ubuntu连接到数据库服务器。我使用了sqlcmd -S <host> -U <username>并测试了一些查询(比如SELECT * from users_data),它可以正常工作。

现在,我修改了config/database.php并添加了以下内容。

'sqlsrv' => [
                'driver'   => 'MSSQL',
                'host'     => env('DB_HOST', 'host.of.the.database'),
                'database' => env('DB_DATABASE', 'my_database'),
                'username' => env('DB_USERNAME', 'my_username'),
                'password' => env('DB_PASSWORD', 'my_pass'),
          'port'     => '1433',
                'prefix'   => '',
            ],

但是我收到了一个错误:

[InvalidArgumentException]
  Unsupported driver [MSSQL]
"

“MSSQL”是我用来配置FreeTDS的名称。

"

1
这可能会给你一些线索 http://www.easysoft.com/products/data_access/odbc-sql-server-driver/getting-started.html - RiggsFolly
这甚至可能是一个重复的问题 https://dev59.com/kHVC5IYBdhLWcg3w51ny - RiggsFolly
我一直在关注这个http://askubuntu.com/questions/578934/mssql-connection-from-ubuntu,但它使用的是MSSQL而不是sqlsrv。我找不到/usr/local/etc/odbcinst.ini。 - Vahn Marty Cagalawan
1
对我来说,odbcinst.ini在/etc/odbcinst.ini中。我不知道你是否已经找到了解决方案,但我和你遇到了同样的问题。我可以通过命令行连接到我的数据库,但php无法看到驱动程序。 - Marc Boisvert
2
嗨@VahnMartyCagalawan,我也有完全相同的问题。你解决了吗? - Fokwa Best
显示剩余2条评论
4个回答

29

对于那些之后出现的人

确保你使用的PHP版本(对我来说,当前使用php 7.1的homestead,所以我安装了php7.1-sybase)

sudo apt-get install freetds-common freetds-bin unixodbc php7.1-sybase

而且司机是

'sqlsrv' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', 'localhost'),
            'database' => env('DB_DATABASE', 'forge'),
            'port' => env('DB_PORT', '1433'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
        ]

您可以使用tsql确保连接信息正确

TDSVER=8.0 tsql -H Host -U Username -D DatabaseName -p 1433 -P Password

注意:在此之后,您需要重新运行命令php artisan serve


1
如何在Windows 10中完成这个操作? - Ke Vin
@KeVin,你找到解决方案了吗?我在Windows上也遇到了同样的问题。 - Lim Socheat
1
对于php7.2,我替换成了php7.2-sybase - insign
由于某种原因,该软件包不存在,因此无法在7.4上运行。 - Kyle Crossman

7

我也遇到过“找不到驱动程序”的错误,在安装以下软件包后解决了问题:

sudo apt-get install freetds-common freetds-bin unixodbc php5-sybase

然而我正在使用 sqlsrv 驱动程序,这是我的 config/database.php 文件:

'sqlsrv' => [
        'driver'   => 'sqlsrv',
        'host'     => env('DB_HOST', 'localhost'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset'  => 'utf8',
        'prefix'   => '',
    ],

3
安装 Sybase 时,请确保与您的虚拟机使用的版本相匹配。
运行:
php --version

然后安装正确的Sybase版本:

sudo apt-get install freetds-common freetds-bin unixodbc php7.#-sybase

如果您遇到编码错误,您需要更新freedts和php.ini配置。更改/etc/freetds/freetds.conf文件以以下方式:
[global]
        # TDS protocol version
        tds version = 8.0

        # Whether to write a TDSDUMP file for diagnostic purposes
        # (setting this to /tmp is insecure on a multi-user system)
;       dump file = /tmp/freetds.log
;       debug flags = 0xffff

        # Command and connection timeouts
;       timeout = 10
;       connect timeout = 10

        # If you get out-of-memory errors, it may mean that your client
        # is trying to allocate a huge buffer for a TEXT field.
        # Try setting 'text size' to a more reasonable limit
        text size = 64512
        client charset =  UTF-8

# A typical Sybase server
[egServer50]
        host = symachine.domain.com
        port = 5000
        tds version = 5.0

# A typical Microsoft server
[egServer70]
        host = ntmachine.domain.com
        port = 1433
        tds version = 7.0

[mssql]
        host =
        Port = 1433
        tds version = 8.0

将以下内容添加到您的php.ini文件中:

client charset = UTF-8

1

在尝试运行这些命令之前,请始终运行sudo apt-get upgrade

谢谢,这些答案非常有帮助。请让我解释一下我使用的是 laravel/homestead vagrant box 版本 7.1.0 和 PHP 7.3。

我在我的 vagrant homestead 虚拟盒子中运行了命令sudo apt-get install freetds-common freetds-bin unixodbc php7.3-sybase

该命令提示我两次,要么保留本地的 php.ini 配置文件,要么使用“安装程序的版本”。我选择两次都使用安装程序的版本,一切正常。这是我的 laravel 配置文件夹中的 database.php 文件。此外,我设置了default => env('DB_CONNECTION', 'sqlsrv')


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接