Соединение с базой данных Laravel и MS SQL Server вызывает ошибку "(3/3) QueryException не удалось найти драйвер"

Guys, I tried lots of things mentioned in Stackru 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.

Все работало нормально, теперь я переместил код в другую систему, там я получаю эту ошибку (обе системы имеют одинаковые учетные данные, меняются только имена серверов, которые я изменил), поэтому код должен работать должным образом, так как нет изменения сделаны.

Я попытался проверить номер порта TCP/IP SQL Server в SQL Server Configuration Manager и поменял его на 1433 все равно не повезло.

Я проверил большинство ответов здесь, они относятся к исключению PDO и попросил людей раскомментировать часть extension=php_pdo_mysql.dll но в моем случае его SQL Server и обычный wamp работают безупречно, похоже, проблема с LARAVEL.

Кто-нибудь может предоставить решения для этого?

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 не включен здесь, это то, что вызывает проблему?

3 ответа

Решение

Так что я наконец-то смог разобраться в проблеме, опубликовав то же самое, чтобы она помогла тому, кто ударил несколько дней, и рвал на себе волосы, чтобы найти решение.

  1. Убедитесь, что вы указали правильный порт в Laravel при подключении и тот же, что и у SQL Server Configuration Manager TCP/IP.

  2. Убедитесь, что ваш TCP / IP включен в SQL Server Configuration Manager,

  3. У меня было немного Extension которые отсутствовали в моем php.ini файл, поэтому я скопировал вставил эти расширения на мой php.ini файл в PHP WAMP.

    расширение =php_bz2.dll

    расширение = php_curl.dll

    расширение =php_sqlsrv_56_ts.dll

    расширение =php_sqlsrv_56_nts.dll

    расширение = php_com_dotnet.dll

    ; Расширение = php_enchant.dll

    расширение = php_fileinfo.dll

    ; Расширение = php_ftp.dll

    расширение =php_gd2.dll

    расширение =php_gettext.dll

    расширение =php_gmp.dll

    расширение = php_intl.dll

    расширение = php_imap.dll

    ; Расширение =php_interbase.dll

    расширение = php_ldap.dll

    расширение = php_mbstring.dll

    extension = php_exif.dll; Должно быть после mbstring, так как это зависит от него

    расширение =php_mysqli.dll

    расширение =php_odbc.dll

    расширение = php_openssl.dll

    ; Расширение =php_pdo_firebird.dll

    расширение = php_pdo_mysql.dll

    ; Расширение = php_pdo_oci.dll

    ; extension = php_oci8_12c.dll; Использование с Oracle Database 12c Instant Client

    расширение = php_pdo_odbc.dll

    ; Расширение =php_pdo_pgsql.dll

    расширение = php_pdo_sqlite.dll

    ; Расширение = php_pgsql.dll

    ; Расширение = php_phpdbg_webhelper.dll

    ; Расширение = php_shmop.dll

  4. Каждый раз, когда вы что-то меняете в .env файл в Laravel, вам нужно обновить его, иначе он все равно будет использовать старые данные, которые вы предоставили.

    php artisan config:clear

    php artisan config:cache

  5. Перезагрузите сервер WAMP и сервер Laravel php artisan server

  6. Мой файл.env в Laravel:

    DB_CONNECTION = SQLSRV

    DB_HOST = 127.0.0.1

    DB_PORT = 1433

    DB_DATABASE = DATABASE_NAME

    DB_USERNAME= са

    DB_PASSWORD=MyPass

Надеюсь, это должно сработать для вас, ребята, в противном случае все самое лучшее и попытаться найти решение, и, пожалуйста, дайте мне знать.

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!

Проверить 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

Это также решит проблему.

Возможно, немного поздно, но вот файл докера для PHP + SqlServer

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

Другие вопросы по тегам