Intro. Mon application laravel utilisait mysql, elle doit maintenant être hébergée sur le réseau de l'entreprise où je travaille (je travaille à distance). Et cette société, ce sont des potes Microsoft, je dois donc intégrer Laravel à leur serveur SQL.
J'ai ceci dans mon .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
Après avoir utilisé le php artisan migrate
Erreur:
[PDOException]
could not find driver
J'utilise Ubuntu, une boîte distante dédiée pour moi (de mon employeur). J'ai déjà essayé d'utiliser SQL Server dans mon application Laravel auparavant (avec mon PC Windows). Autant que je m'en souvienne, j'ai édité des textes dans le fichier php.ini de xampp. En tant qu’utilisateur novice de Linux, c’est trop difficile pour moi (car j’utilisais uniquement CLI).
Édité (nouvelle version)
J'ai donc déjà eu la connectivité d'Ubuntu au serveur de base de données. J'ai utilisé le sqlcmd -S <Host> -U <username>
et j'ai testé les requêtes (telles que SELECT * from users_data
) et cela fonctionne.
Maintenant, j'ai modifié le config/database.php
et j'ai ajouté ceci.
'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' => '',
],
mais j'ai eu une erreur:
[InvalidArgumentException]
Unsupported driver [MSSQL]
"MSSQL" est le nom que j'utilise pour configurer FreeTDS.
Pour ceux qui sont venus après
Assurez-vous de la version PHP que vous utilisez (pour moi Homestead utilise actuellement PHP 7.1, j'ai donc installé php7.1-sybase)
Sudo apt-get install freetds-common freetds-bin unixodbc php7.1-sybase
Et le chauffeur est
'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' => '',
]
Vous pouvez vous assurer que les informations de connexion sont correctes à l'aide de tsql
TDSVER=8.0 tsql -H Host -U Username -D DatabaseName -p 1433 -P Password
Également eu l'erreur could not find driver
, résolu le problème après l'installation des paquets suivants:
Sudo apt-get install freetds-common freetds-bin unixodbc php5-sybase
Cependant, j'utilise le pilote sqlsrv
, voici mon 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' => '',
],
Lors de l'installation de sybase, assurez-vous qu'il correspond à la version utilisée par votre VM.
Courir
php --version
puis installez la bonne version de sybase:
Sudo apt-get install freetds-common freetds-bin unixodbc php7.#-sybase
Si vous rencontrez des erreurs d'encodage, vous devrez également mettre à jour votre configuration de freedts et php.ini. Modifiez le fichier /etc/freetds/freetds.conf afin qu’il ressemble à:
[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
Ajoutez ceci à votre php.ini:
client charset = UTF-8