Laravel 5.7 无法连接到 Windows 上的 SQLSRV 数据库(找不到驱动程序)

Posted

技术标签:

【中文标题】Laravel 5.7 无法连接到 Windows 上的 SQLSRV 数据库(找不到驱动程序)【英文标题】:Laravel 5.7 can not connect to SQLSRV Database on Windows (could not find driver) 【发布时间】:2019-05-16 21:00:35 【问题描述】:

我的环境文件

DB_CONNECTION=sqlsrv
DB_HOST=DESKTOP-ATB1EFG
DB_DATABASE=frontdesk
DB_USERNAME=sa
DB_PASSWORD=something_secret123
DB_PORT=1433

我已经用原始 php 进行了如下测试,它已成功连接并返回“已连接”字符串。

serverName = "DESKTOP-ATB1EFG";
    $connectionOptions = array(
        "Database" => "frontdesk",
        "Uid" => "sa",
        "PWD" => "something_secret123"
    );
    //Establishes the connection
    $conn = sqlsrv_connect($serverName, $connectionOptions);
    if($conn)
        echo "Connected!";

    else
        echo "Failed";
    

但是,当我尝试使用 php artisan migrate 进行迁移时,它返回 QueryExeption

找不到驱动程序 (SQL: select * from sysobjects where type = 'U' 和名称 = 迁移)

异常跟踪:

1 PDOException::("找不到驱动程序")

C:\wamp64\www\frontdesk.sys\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70

2 PDO::__construct("dblib:host=DESKTOP-ATB1EFG:1433;dbname=frontdesk;charset=utf8", “sa”,“something_secret123”,[]) C:\wamp64\www\frontdesk.sys\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70

我已经检查了 php 7.2.10,它已经启用了扩展

extension=php_sqlsrv_72_nts_x64.dll
extension=php_pdo_sqlsrv_72_nts_x64.dll
extension=php_sqlsrv_72_ts_x64.dll
extension=php_pdo_sqlsrv_72_ts_x64.dll

【问题讨论】:

您不应该使用ts线程安全)和nts非线程安全)版本的sqlsrv扩展同时。另外,您是否确保在 CLI 的 php.ini 以及网络服务器(php-fpm 或其他)中都启用了扩展? 感谢您的评论,现在它正在工作。我需要添加到 php 文件夹中的 php.ini 和 apache 文件夹中的 php.ini 。谢谢。 【参考方案1】:

我通过添加扩展解决了这个问题:

extension=php_pdo_sqlsrv_71_ts_x64.dll
extension=php_sqlsrv_71_ts_x64.dll

php7.1.22 文件夹中的 php.iniapache 文件夹中的 php.ini

谢谢。

【讨论】:

【参考方案2】:

有时在 Xampp 中使用 Git Bash 运行迁移不起作用。在我的情况下,使用 Laragon 终端,或者您可以尝试 Windows 终端。

【讨论】:

【参考方案3】:

此链接帮助我正确安装:

https://www.danhendricks.com/2017/11/installing-microsoft-sql-server-php-extensions-plesk-onyx/

我什至不需要进行 3. 步。您需要安装 Microsoft ODBC Driver for SQL Server 和 Microsoft Drivers for PHP for SQL Server。

然后您可以通过 Tinker 检查连接。请确保您在两种环境中都使用 sam PHP 版本。

php artisan tinker
DB::connection('your_sqlsrv_connection_name')->getPdo();

【讨论】:

【参考方案4】:

目前 laravel 支持

mysql
PostgreSQL
SQLite
SQL Server

如果您使用其中任何一种,请按照提示操作

打开你的 .env 文件,你会发现一堆变量

你会发现这些

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

例如: 只需将DB_CONNECTION 更改为您当前的数据库,例如SQLite

并填写您的凭据和用户名,数据库名称

在此处查看支持的数据库 https://laravel.com/docs/5.7/database#introduction

【讨论】:

是的,我已经更改了我的 env 文件,如下所示。 DB_CONNECTION=sqlsrv DB_HOST=DESKTOP-ATB1EFG DB_DATABASE=前台 DB_USERNAME=sa DB_PASSWORD=@@itmall.com.kh078 DB_PORT=1433

以上是关于Laravel 5.7 无法连接到 Windows 上的 SQLSRV 数据库(找不到驱动程序)的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Laravel 连接到 MailChimp(laravel 5.4)

我的 Laravel 项目无法连接到 XAMPP 数据库

Laravel 5.1 SSH - 无法连接到远程服务器

无法连接到 laravel 5.6 中的数据库 xampp

Laravel Dusk 错误:无法连接到 localhost 端口 9515:连接被拒绝

Laravel 无法连接到数据库 - 迁移 - 错误 2002