Laravel для SQL Server (sqlsrv). [PDOException] не удалось найти драйвер
Введение. В моем приложении laravel использовался mysql, теперь его нужно размещать в сети компании, в которой я работаю (я - удаленный рабочий). И эта компания - Microsoft peeps, поэтому мне нужно интегрировать laravel в свой SQL Server.
У меня это в моем .env
DB_CONNECTION=sqlsrv
DB_HOST=ip.address.of.server
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=my_username
DB_PASSWORD=my_password
После использования php artisan migrate
Ошибка:
[PDOException]
could not find driver
Я использую Ubuntu, удаленный ящик, предназначенный для меня (от моего работодателя). Я пробовал использовать sql-сервер в своем приложении laravel раньше (используя мой компьютер с ОС Windows). Насколько я помню, я редактировал некоторые тексты в xampp php.ini. Как пользователь Linux для новичков, это слишком сложно для меня (поскольку я использовал только CLI).
EDITED (новая версия)
Итак, я уже получил подключение от Ubuntu к серверу базы данных. Я использовал sqlcmd -S <host> -U <username>
и я проверил запросы (например, SELECT * from users_data
), и он работает.
Теперь я изменил config/database.php
, и я добавил это.
'sqlsrv' => [
'driver' => 'MSSQL',
'host' => env('DB_HOST', 'host.of.the.database'),
'database' => env('DB_DATABASE', 'my_database'),
'username' => env('DB_USERNAME', 'my_username'),
'password' => env('DB_PASSWORD', 'my_pass'),
'port' => '1433',
'prefix' => '',
],
но я получил сообщение об ошибке:
[InvalidArgumentException]
Unsupported driver [MSSQL]
"MSSQL" - это имя, которое я использую для настройки FreeTDS.
Ответы
Ответ 1
Для тех, кто пришел после
Убедитесь, что вы используете PHP-версию (для меня в настоящее время используется php 7.1, поэтому я установил php7.1-sybase)
sudo apt-get install freetds-common freetds-bin unixodbc php7.1-sybase
И драйвер
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'port' => env('DB_PORT', '1433'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
]
Вы можете убедиться, что информация о подключении верна, используя tsql
TDSVER=8.0 tsql -H Host -U Username -D DatabaseName -p 1433 -P Password
Ответ 2
Также была ошибка could not find driver
, разрешившая проблему после установки следующих пакетов:
sudo apt-get install freetds-common freetds-bin unixodbc php5-sybase
Однако я использую драйвер sqlsrv
, здесь my config/database.php
:
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
],
Ответ 3
При установке sybase убедитесь, что она соответствует версии, используемой вашей виртуальной машиной.
Запустить
php --version
а затем установите правильную версию sybase:
sudo apt-get install freetds-common freetds-bin unixodbc php7.#-sybase
Если вы получаете ошибки в кодировке, вам также нужно будет обновить ваши настройки и php.ini. Измените /etc/freetds/freetds.conf так, чтобы он выглядел следующим образом:
[global]
# TDS protocol version
tds version = 8.0
# Whether to write a TDSDUMP file for diagnostic purposes
# (setting this to /tmp is insecure on a multi-user system)
; dump file = /tmp/freetds.log
; debug flags = 0xffff
# Command and connection timeouts
; timeout = 10
; connect timeout = 10
# If you get out-of-memory errors, it may mean that your client
# is trying to allocate a huge buffer for a TEXT field.
# Try setting 'text size' to a more reasonable limit
text size = 64512
client charset = UTF-8
# A typical Sybase server
[egServer50]
host = symachine.domain.com
port = 5000
tds version = 5.0
# A typical Microsoft server
[egServer70]
host = ntmachine.domain.com
port = 1433
tds version = 7.0
[mssql]
host =
Port = 1433
tds version = 8.0
Добавьте это в свой php.ini:
client charset = UTF-8
Ответ 4
Всегда запускайте sudo apt-get upgrade
перед тем, как запускать эти команды.
Спасибо, эти ответы очень помогли. Пожалуйста, позвольте мне объяснить, что я делал, используя laravel/hometead vagrant box версии 7.1.0 и PHP 7.3.
Я запустил команду sudo apt-get install freetds-common freetds-bin unixodbc php7.3-sybase
в моей виртуальной виртуальной sudo apt-get install freetds-common freetds-bin unixodbc php7.3-sybase
.
Эта команда дважды предложила мне сохранить локальный файл конфигурации php.ini или использовать "версию установщика". Я решил использовать версию установщика оба раза, и все работало отлично. Вот мой файл database.php в моей папке конфигурации laravel. Кроме того, я установил default => env('DB_CONNECTION', 'sqlsrv')