web-dev-qa-db-fra.com

Laravel à SQL Server (sqlsrv). [PDOException] impossible de trouver le pilote

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.

14

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
12
Ad NAN

É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'   => '',
    ],
2
zapdev

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