2016-10-04 3 views
10

Intro. В моем приложении laravel использовался mysql, теперь его нужно размещать в сети компании, в которой я работаю (я - удаленный рабочий). И эта компания - Microsoft peeps, поэтому мне нужно интегрировать laravel в свой SQL Server.Laravel to SQL Server (sqlsrv). [PDOException] не удалось найти драйвер

У меня есть это в моей .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).

редактируется (новая версия)

Так что я уже получил связь с 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

Это может дать вам некоторые подсказки HTTP: //www.easysoft .com/products/data_access/odbc-sql-server-driver/get-started.html – RiggsFolly

+0

И это может быть даже дубликат http://stackoverflow.com/questions/149395/what-are-some-ways-of- accessing-microsoft-sql-server-from-linux – RiggsFolly

+0

Я слежу за этим http://askubuntu.com/questions/578934/mssql-connection-from-ubuntu, но он использует MSSQL, а не sqlsrv. И я не могу найти /usr/local/etc/odbcinst.ini –

ответ

1

была также ошибка could not find driver, решен вопрос после установки следующих пакетов:

sudo apt-get install freetds-common freetds-bin unixodbc php5-sybase 

Однако я использую драйвер sqlsrv, вот мой 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' => '', 
    ], 
7

Для тех, кто пришел после

Убедитесь, что вы используете PHP-версию (для меня в настоящее время используется php 7.1, поэтому я установил php7.1-syba се)

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 
+0

Как это сделать в Windows 10? –

0

При установке Sybase, убедитесь, что она совпадает с которую использует ваша виртуальная машина.

Run

php --version 

, а затем установить правильную версию SyBase:

Если вы получаете ошибки кодирования, вам нужно обновить freedts и 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