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

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, но в моем случае этоs 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 ]

0 голосов
/ 18 сентября 2018

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

  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

    ; расширение = 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

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

0 голосов
/ 09 октября 2018

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

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

0 голосов
/ 10 сентября 2018

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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...