Laravel和MS SQL Server数据库连接引发错误“((3/3)QueryException找不到驱动程序”

时间:2018-09-10 15:57:42

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

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的问题。 / p>

有人可以为此提供解决方案吗?

Edited part below with some more info:

我检查了给定的凭据是否正确,以及是否能够使用控制器中的简单功能连接到数据库: 我的路线: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,这是引起问题的原因吗?

4 个答案:

答案 0 :(得分: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!

答案 1 :(得分:1)

所以我终于能够弄清楚这个问题,将其发布出来,这样可以帮助打了好几天的人,撕开头发找到解决方案。

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

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

  3. 我的Extension文件中缺少一些php.ini,因此我将这些扩展名复制粘贴到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 Instant Client一起使用

    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 =数据库名称

    DB_USERNAME = sa

    DB_PASSWORD = MyPass

希望这对你们有用,否则一切顺利,并尝试找到分辨率,也请让我知道。

答案 2 :(得分:0)

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

extension=php_pdo_sqlsrv_56_ts.dll
extension=php_pdo_sqlsrv_56_nts.dll

这也可以解决问题。

答案 3 :(得分:0)

也许有点晚,但这是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