Php LAVEL到SQL Server(sqlsrv)。[PDOException]找不到驱动程序

Php LAVEL到SQL Server(sqlsrv)。[PDOException]找不到驱动程序,php,sql-server,laravel,pdo,odbc,Php,Sql Server,Laravel,Pdo,Odbc,介绍。我的laravel应用程序使用的是mysql,现在它需要托管在我工作的公司的网络中(我是一名远程工作者)。这家公司是微软的peeps,所以我需要将laravel集成到他们的SQL Server中 我的环境里有这个 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 arti

介绍。我的laravel应用程序使用的是mysql,现在它需要托管在我工作的公司的网络中(我是一名远程工作者)。这家公司是微软的peeps,所以我需要将laravel集成到他们的SQL Server中

我的环境里有这个

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迁移后

错误:

  [PDOException]
  could not find driver
我正在使用Ubuntu,一个专用于我的远程设备(来自我的雇主)。我曾经尝试过在我的laravel应用程序中使用sql server(使用我的Windows PC)。就我所记得的,我在xampp php.ini中编辑了一些文本。作为Linux新手,这对我来说太难了(因为我只使用CLI)

已编辑(新版本)

所以我已经获得了从Ubuntu到数据库服务器的连接。我使用了
sqlcmd-S-U

我测试了这些查询(比如
SELECT*fromsusers\u 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的名称。

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

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'   => '',
    ],

为那些后来的人

确保您使用的PHP版本(对于我来说,homestead目前使用php7.1,所以我安装了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

安装sybase时,请确保它与VM使用的版本匹配

然后安装正确的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

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

谢谢,这些答案帮助很大。请让我解释一下我使用laravel/homestead vagrant box版本7.1.0和PHP7.3做了什么

我在我的流浪家园虚拟盒中运行了命令
sudo apt get install freetds common freetds bin unixodbc php7.3-sybase


这个命令两次提示我要么保留本地php.ini配置文件,要么使用“安装程序版本”。我两次都选择使用安装程序的版本,一切都很好。另外,我设置了
default=>env('DB_CONNECTION','sqlsrv')

这可能会给你一些线索,甚至可能是重复的,我一直在遵循这一点,但它使用MSSQL而不是sqlsrv。我找不到/usr/local/etc/odbcinst.ini对我来说,odbcinst.ini在/etc/odbcinst.ini中,我不知道您是否找到了解决方案,但我遇到了与您相同的问题。我可以用命令行很好地连接到我的数据库,但是php没有看到驱动程序。你能解决这个问题吗?在windows 10中如何解决这个问题?@KeVin,你找到解决方案了吗?我在windows中也有同样的问题。对于php7.2,我将其替换为
php7.2-sybase
[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
client charset = UTF-8