【问题标题】:Laravel and MS SQL Server Database connection is throwing the error "(3/3) QueryException could not find driver"Laravel 和 MS SQL Server 数据库连接抛出错误“(3/3) QueryException 找不到驱动程序”
【发布时间】:2019-02-15 02:37:16
【问题描述】:

Guys, I tried lots of things mentioned in Stackoverflow and laracasts for this issue but none worked, hence posting this in hope of getting some answer or advice.另外,提供的大部分东西属于MYSQL,而不是MS SQL。

我正在使用 Windows 10 并使用 Laravel 连接到我的 Microsoft SQL Server 2012 Express 版本。

我的 .erv 文件如下:

DB_CONNECTION=sqlsrv
DB_HOST=W1234567\SQLEXPRESS
DB_PORT=1433
DB_DATABASE=My_Database_Name
DB_USERNAME=sa
DB_PASSWORD=My_Password

给定的详细信息是正确的,但是当我运行一个简单的查询时,我在Laravel Model 中收到以下错误消息:

(3/3) QueryException
could not find driver (SQL: SELECT COUNT(*) AS count FROM TBL_Data
WHERE ACTIVE_IND = 1
)

我的 WAMP 运行正常,我已将 SQLSRV 文件添加到我的 WAMP。

整个事情工作正常,现在我将代码移动到不同的系统,我收到了这个错误(两个系统都有相同的凭据,唯一的变化是我更改的服务器名称)所以代码应该正常工作没有进行任何更改。

我尝试检查SQL Server Configuration Manager 中的 SQL Server TCP/IP 端口号并将其更改为 1433 仍然没有成功。

我在这里检查了大部分答案,它们属于 PDO 异常,并要求人们取消注释部分 extension=php_pdo_mysql.dll 但在我的情况下,它的 SQL Server 和正常的 wamp 工作完美,似乎只是 LARAVEL 的问题。

谁能为此提供解决方案?

Edited part below with some more info:

我检查了给定的凭据是否正确,以及我是否能够使用控制器中的一个简单函数连接到 db: 我的路线:Route::get('/Test', 'My_Controller@Test');

我的控制器:

public function Test(Request $request)
{
  if(DB::connection()->getDatabaseName())
   {
    echo "connected successfully to database ".DB::connection()->getDatabaseName();
  }

}

Chrome 窗口中的输出:connected successfully to database My_Database_Name

正如我们从上面的消息中看到的,我能够正确连接,但是当我运行查询时仍然出现错误:

(3/3) QueryException
could not find driver (SQL: SELECT * FROM TBL_Data WHERE ACTIVE_IND = 1 )

在控制器中添加phpinfo();并尝试点击URL并获得与PDO相关的以下信息:

PDO support enabled

PDO drivers mysql, SQLite

此处未启用 SQLSRV,这是导致问题的原因吗?

【问题讨论】:

  • 您是否安装了php_pdo_sqlsrv.dll 扩展程序?
  • 是的,我已将它们添加到 php.ini 文件中,我编写了简单的连接测试 PHP 文件并使用 WAMP 进行了测试,我能够使用 WAMP 进行连接,但使用 Laravel 我无法连接。以下是我在 php.ini 文件 extension=php_sqlsrv_56_ts.dll extension=php_sqlsrv_56_nts.dll extension=php_pdo_sqlsrv_56_ts.dll extension=php_pdo_sqlsrv_56_nts.dll 中的 sqlsrv 文件
  • Gus 谁能帮助解决这个问题?我仍然收到错误,我尝试重新安装 SQL Server Express 2014 版,希望它与 TCP/IP 端口问题有关,但仍然没有运气,请提供一些建议。
  • 将phpinfo(); 放入您的控制器并访问页面:是否有pdo_sqlsrv 部分?
  • @JonasStaudenmeir 添加了 phpinfo();在控制器中并尝试访问该 URL 并获取 PDO 信息,但没有提及 SQLSRV,(我已在底部的上述问题中添加了观察结果,请检查)。这会导致问题吗?如果是这样如何解决这个问题?

标签: php sql-server laravel laravel-5 database-connection


【解决方案1】:

This did NOT work for me but may work for some people hence posting this answer, hope this will be helpful

我尝试更改 SQL Server 的端口号,但这个不起作用,如果有人想尝试,他们可以试试这个,看看这个是否可以工作。

The issue was with MS-SQL Server 2012 Express didn't have port 1433 in the SQL Server Configuration Manager > SQL Server Network Configuration > TCP/IP > Properties> TCP Port was BLANK! Just type 1433 and restart the services and BAM!! Like Magic!

【讨论】:

    【解决方案2】:

    所以我终于能够找出问题所在,发布相同的内容,以便帮助那些已经罢工数天并扯掉头发的人找到解决方案。

    1. 确保在连接时在 Laravel 中提供了正确的端口,并且与 SQL Server Configuration Manager TCP/IP 相同。

    2. 确保您的 TCP/IP 在 SQL Server Configuration Manager 中启用。

    3. 我的 php.ini 文件中缺少一些 Extension,因此我将这些扩展名复制粘贴到 WAMP 的 PHP 中的 php.ini 文件中。

      extension=php_bz2.dll

      extension=php_curl.dll

      extension=php_sqlsrv_56_ts.dll

      extension=php_sqlsrv_56_nts.dll

      extension=php_com_dotnet.dll

      ;extension=php_enchant.dll

      extension=php_fileinfo.dll

      ;extension=php_ftp.dll

      extension=php_gd2.dll

      extension=php_gettext.dll

      extension=php_gmp.dll

      extension=php_intl.dll

      extension=php_imap.dll

      ;extension=php_interbase.dll

      extension=php_ldap.dll

      extension=php_mbstring.dll

      extension=php_exif.dll ;必须在 mbstring 之后,因为它取决于它

      extension=php_mysqli.dll

      extension=php_odbc.dll

      extension=php_openssl.dll

      ;extension=php_pdo_firebird.dll

      extension=php_pdo_mysql.dll

      ;extension=php_pdo_oci.dll

      ;extension=php_oci8_12c.dll ;与 Oracle Database 12c 即时客户端一起使用

      extension=php_pdo_odbc.dll

      ;extension=php_pdo_pgsql.dll

      extension=php_pdo_sqlite.dll

      ;extension=php_pgsql.dll

      ;extension=php_phpdbg_webhelper.dll

      ;extension=php_shmop.dll

    4. 每次更改 Laravel 中的 .env 文件时,都需要刷新它,否则它仍然会使用您提供的旧数据。

      php artisan config:clear

      php artisan config:cache

    5. 重启WAMP服务器和Laravel服务器php artisan server

    6. 我在 Laravel 中的 .env 文件:

      DB_CONNECTION=sqlsrv

      DB_HOST=127.0.0.1

      DB_PORT=1433

      DB_DATABASE=DataBase_Name

      DB_USERNAME=sa

      DB_PASSWORD=MyPass

    希望这对你们有用,否则一切顺利,并尝试找到解决方案,也请告诉我。

    【讨论】:

      【解决方案3】:

      检查以下位置C:\wamp\bin\php\php5.6.35\php.ini 中的php.ini 文件并添加以下扩展名(如果它尚不存在)。

      extension=php_pdo_sqlsrv_56_ts.dll
      extension=php_pdo_sqlsrv_56_nts.dll
      

      这也将解决问题。

      【讨论】:

        【解决方案4】:

        可能有点晚了,但是这里有一个 PHP + SqlServer 的 docker 文件

        FROM php:7.4.4-fpm-alpine as base
        
        COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/bin/
        
        RUN install-php-extensions sqlsrv pdo_sqlsrv
        
        # Sql server necessary additions
        RUN curl -O https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.5.1.1-1_amd64.apk \
            && curl -O https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/mssql-tools_17.5.1.2-1_amd64.apk \
            && apk add --allow-untrusted msodbcsql17_17.5.1.1-1_amd64.apk \
            && apk add --allow-untrusted mssql-tools_17.5.1.2-1_amd64.apk
        # Fix for sql server
        ENV LC_ALL=C
        
        

        【讨论】:

          猜你喜欢
          • 2015-02-23
          • 1970-01-01
          • 1970-01-01
          • 2013-06-09
          • 2021-12-04
          • 2020-08-17
          • 2022-06-15
          • 1970-01-01
          • 2016-05-06
          相关资源
          最近更新 更多