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.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.
Гас может кто-нибудь помочь в этом вопросе? Я все еще получаю сообщение об ошибке, я попытался повторно установить SQL Server Express edition 2014, надеясь, что это связано с проблемой порта TCP / IP, но все равно не повезло. Пожалуйста, дайте совет.
Вставьте phpinfo(); в свой контроллер и перейдите на страницу: Есть ли раздел pdo_sqlsrv?
@JonasStaudenmeir Добавлен phpinfo (); в контроллере и попытался попасть по этому URL-адресу и получил информацию о PDO, но в нем нет упоминания о SQLSRV (я добавил наблюдение в приведенный выше вопрос внизу, проверьте, пожалуйста). могло ли это вызвать проблему? если да, то как это решить?
Выложите, пожалуйста, строки extension= из вашего файла php.ini. phpinfo() использует файл php.ini, в который вы добавили расширения («Загруженный файл конфигурации»)?
@JonasStaudenmeir На самом деле это сработало, я заменил весь свой Extension на другое расширение файла php.ini, которое работало с Laravel. Я написал то же самое ниже в ответе. Спасибо за помощь.
@JonasStaudenmeir Опять же, я столкнулся с той же проблемой. Я попытался добавить phpinfo();, как упоминалось вами в предыдущих комментариях, и мне не удалось найти там раздел pdo_sqlsrv. я что-то делаю не так, пожалуйста, поделитесь своими мыслями. У меня нормальный запрос SQL Server работает без проблем.
Вы изменили файл php.ini, который phpinfo() показывает в разделе «Загруженный файл конфигурации»?
@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






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!
Итак, я, наконец, смог разобраться в проблеме, опубликовав то же самое, чтобы помочь тем, кто бьет несколько дней и рвет волосы, найти решение.
Убедитесь, что вы указали правильный порт в Laravel при подключении и он такой же, как у SQL Server Configuration Manager TCP / IP.
Убедитесь, что ваш TCP / IP включен в SQL Server Configuration Manager.
У меня было несколько 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
Каждый раз, когда вы меняете что-то в файле .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 = имя_базы данных
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
Вы устанавливали расширение
php_pdo_sqlsrv.dll?