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')