Laravel to SQL Server (sqlsrv). [PDOException] could not find driver
For those who came after
Make sure of the PHP version you use (for me homestead currently using php 7.1, so I installed php7.1-sybase)
sudo apt-get install freetds-common freetds-bin unixodbc php7.1-sybase
And the driver is
'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' => '', ]
You can make sure that the connection information is correct using tsql
TDSVER=8.0 tsql -H Host -U Username -D DatabaseName -p 1433 -P Password
Also had the could not find driver
error, resolved the issue after installing following packages:
sudo apt-get install freetds-common freetds-bin unixodbc php5-sybase
However i am using the sqlsrv
driver, here's 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' => '', ],
When installing sybase, ensure that it matches up with the version that your VM uses.
Run
php --version
and then install the right sybase version:
sudo apt-get install freetds-common freetds-bin unixodbc php7.#-sybase
If you're getting encoding errors, you'll need to update your freedts and php.ini configuration as well. Change the /etc/freetds/freetds.conf so that it looks like:
[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
Add this to your php.ini:
client charset = UTF-8