【问题标题】:Laravel to SQL Server (sqlsrv). [PDOException] could not find driverLaravel 到 SQL Server (sqlsrv)。 [PDOException] 找不到驱动程序
【发布时间】:2017-02-13 02:10:00
【问题描述】:

介绍。我的 laravel 应用程序使用的是 mysql,现在它需要托管在我正在工作的公司的网络中(我是一名远程工作者)。而且这家公司是微软的偷窥者,所以我需要将 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 的名称。

【问题讨论】:

标签: php sql-server laravel pdo odbc


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    运行

    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
    

    【讨论】:

      【解决方案3】:

      对于后来的人

      确定你使用的PHP版本(对我来说宅基地目前使用php 7.1,所以我安装了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
      

      【讨论】:

      • 如何在 Windows 10 中执行此操作?
      • @KeVin,你找到解决方案了吗?我在windows中也有同样的问题。
      • 对于php7.2我换成了php7.2-sybase
      • 不适用于 7.4,由于某些原因该包不存在
      【解决方案4】:

      还有could not find driver错误,安装以下包后解决:

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

      【讨论】:

        猜你喜欢
        • 2018-12-29
        • 2016-05-16
        • 1970-01-01
        • 2014-05-01
        • 2017-05-29
        • 2016-09-03
        相关资源
        最近更新 更多