При подключении к базе данных Laravel и MS SQL Server возникает ошибка «(3/3) QueryException не удалось найти драйвер»

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.

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

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

Вы устанавливали расширение php_pdo_sqlsrv.dll?

Jonas Staudenmeir 10.09.2018 18:16

Да, я добавил их в файл php.ini, я написал простой файл PHP для тестирования подключения и протестировал его с помощью WAMP, и я могу подключиться с помощью WAMP, но с помощью Laravel я не могу подключиться. Ниже приведены файлы sqlsrv, которые у меня есть в файле 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.

user8268874 10.09.2018 18:36

Гас может кто-нибудь помочь в этом вопросе? Я все еще получаю сообщение об ошибке, я попытался повторно установить SQL Server Express edition 2014, надеясь, что это связано с проблемой порта TCP / IP, но все равно не повезло. Пожалуйста, дайте совет.

user8268874 12.09.2018 07:05

Вставьте phpinfo(); в свой контроллер и перейдите на страницу: Есть ли раздел pdo_sqlsrv?

Jonas Staudenmeir 12.09.2018 12:39

@JonasStaudenmeir Добавлен phpinfo (); в контроллере и попытался попасть по этому URL-адресу и получил информацию о PDO, но в нем нет упоминания о SQLSRV (я добавил наблюдение в приведенный выше вопрос внизу, проверьте, пожалуйста). могло ли это вызвать проблему? если да, то как это решить?

user8268874 17.09.2018 11:33

Выложите, пожалуйста, строки extension= из вашего файла php.ini. phpinfo() использует файл php.ini, в который вы добавили расширения («Загруженный файл конфигурации»)?

Jonas Staudenmeir 17.09.2018 13:02

@JonasStaudenmeir На самом деле это сработало, я заменил весь свой Extension на другое расширение файла php.ini, которое работало с Laravel. Я написал то же самое ниже в ответе. Спасибо за помощь.

user8268874 17.09.2018 23:50

@JonasStaudenmeir Опять же, я столкнулся с той же проблемой. Я попытался добавить phpinfo();, как упоминалось вами в предыдущих комментариях, и мне не удалось найти там раздел pdo_sqlsrv. я что-то делаю не так, пожалуйста, поделитесь своими мыслями. У меня нормальный запрос SQL Server работает без проблем.

user8268874 07.10.2018 23:13

Вы изменили файл php.ini, который phpinfo() показывает в разделе «Загруженный файл конфигурации»?

Jonas Staudenmeir 07.10.2018 23:22

@JonasStaudenmeir Я изменил файл php.ini в папке PHP WAMP и добавил в него часть EXTENSION, чтобы он мог подключаться к SQL Server. У меня есть EXTENSION, упомянутые во 2-м ответе на этот пост. С этими расширениями Wamp работал нормально и подключался к SQL Server с помощью Laravel, поэтому я использовал то же самое. Никаких изменений кроме этого я не вносил. Я внес изменения в файл php.ini, который мы получаем напрямую от WAMP, в моем LOADED CONFIGURATION FILE путь - C:\wamp\bin\php\php5.6.25\php.ini, но я не совсем уверен, что оба php.ini sam

user8268874 08.10.2018 22:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
10
5 367
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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. Убедитесь, что вы указали правильный порт в Laravel при подключении и он такой же, как у SQL Server Configuration Manager TCP / IP.

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

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

    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. Каждый раз, когда вы меняете что-то в файле .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 = имя_базы данных

    DB_USERNAME = sa

    DB_PASSWORD = MyPass

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

Проверьте файл 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

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