Соединение с базой данных 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 ответа
Так что я наконец-то смог разобраться в проблеме, опубликовав то же самое, чтобы она помогла тому, кто ударил несколько дней, и рвал на себе волосы, чтобы найти решение.
Убедитесь, что вы указали правильный порт в Laravel при подключении и тот же, что и у
SQL Server Configuration Manager
TCP/IP.Убедитесь, что ваш TCP / IP включен в
SQL Server Configuration Manager
,У меня было немного
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
Каждый раз, когда вы что-то меняете в
.env
файл в Laravel, вам нужно обновить его, иначе он все равно будет использовать старые данные, которые вы предоставили.php artisan config:clear
php artisan config:cache
Перезагрузите сервер WAMP и сервер Laravel
php artisan server
Мой файл.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