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

Posted

技术标签:

【中文标题】Laravel 到 SQL Server (sqlsrv)。 [PDOException] 找不到驱动程序【英文标题】:Laravel to SQL Server (sqlsrv). [PDOException] could not find driver 【发布时间】: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 的名称。

【问题讨论】:

这可能会给你一些线索easysoft.com/products/data_access/odbc-sql-server-driver/… 这甚至可能是重复的***.com/questions/149395/… 我一直在关注这个askubuntu.com/questions/578934/mssql-connection-from-ubuntu,但它使用的是 MSSQL 而不是 sqlsrv。而且我找不到 /usr/local/etc/odbcinst.ini 对我来说,odbcinst.ini 在 /etc/odbcinst.ini 我不知道你是否找到了解决方案,但我和你有同样的问题。我可以使用命令行很好地连接到我的数据库,但 php 看不到驱动程序。 嗨@VahnMartyCagalawan,我也有同样的问题。你能解决吗? 【参考方案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'   => '',
    ],

【讨论】:

以上是关于Laravel 到 SQL Server (sqlsrv)。 [PDOException] 找不到驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

laravel调用sql server存储过程

使用 Laravel 在 SQL Server 中添加 varchar 列类型

在 Laravel 5.3 中从 SQL Server 获取多个结果集

Laravel 8:调用 DB::unprepared($sql) 时出现 ErrorException::("PDO::exec(): MySQL server has gone away

laravel连sql server报invalid handle returned问题解决方案

在 PHP Laravel 中的 SQL Server 中将字符串转换为日期数据类型