web-dev-qa-db-fra.com

Comment utiliser la connexion SQL Server dans Laravel?

J'ai un projet de travail réalisé en Laravel 3 que je dois basculer vers MsSQL Server (pas mon appel cependant, sniff ...) et je ne comprends pas le Laravel configuration sur ce type de base de données ...

J'ai changé la valeur par défaut à l'intérieur database.php pour ça 'default' => 'sqlsrv' puis j'ai configuré l'hôte, la base de données, le nom d'utilisateur, le mot de passe dans le tableau sqlsrv mais je reçois ce message d'erreur:

Cette extension nécessite le pilote natif Microsoft SQL Server 2012 ODBC Driver pour communiquer avec SQL Server`

Après quelques recherches, j'ai trouvé que nous avons besoin de PDO de SQLSRV, que j'ai déjà comme version 5.4 et dans mon phpinfo je reçois ceci retourné pdo_sqlsrv support : enabled donc tout semble correct mais en même temps, il semble demander ODBC connexions SQLSRV, dois-je vraiment l'utiliser?

Je préfère me connecter directement à partir de la connexion à la base de données Laravel ... mais même si j'en ai besoin et que j'ai créé une connexion ODBC au serveur, comment puis-je les mettre dans ma configuration? Voici ce que j'ai dans ma configuration (bien sûr le my... est remplacé par mes vrais détails):

'sqlsrv' => array(
    'driver'   => 'sqlsrv',
    'Host'     => 'myServerIP', 
    'database' => 'myDatabase',
    'username' => 'myUsername',
    'password' => 'myPassword',
    'prefix'   => '',
 ),

Toute aide serait grandement appréciée, la seule chose que j'ai trouvée près de mon problème était ce lien depuis le forum Laravel: requête Laravel sur SQL Server mais il s'arrête juste sans donner de configurations.

21
ghiscoding

Ahh après beaucoup plus de recherches, j'ai découvert que mon pilote de SQL Server Native Client 10.0 Était obsolète et pas suffisant pour se connecter à un MsSQL Server 2008 Avec PDO, vous devez avoir au moins la version 11.0 Pour se connecter à un serveur SQL Server 2005+

Si vous souhaitez valider la version de votre pilote, vous pouvez passer par Control Panel >> Administrative Tools >> Data Sources (ODBC) puis cliquer sur l'onglet Drivers pour savoir quel SQL Server Native Client Vous avez déjà installé. Si vous souhaitez mettre à jour votre pilote, en fonction de la configuration de votre système d'exploitation, vous pouvez choisir le lien approprié ci-dessous ...

Client natif SQL Server 2012
Package x86 (32 bits) http://go.Microsoft.com/fwlink/?LinkID=239647&clcid=0x409
Package x64 (64 bits) http://go.Microsoft.com/fwlink/?LinkID=239648&clcid=0x409

11
ghiscoding

C'est ce que j'ai fait pour connecter mon Laravel app à MS SQL Server:

  1. Sudo apt-get update

  2. Sudo apt-get install php5-sybase

si vous essayez d'installer php5-mssql, il installera de toute façon php5-sybase, il s'agit du "module Sybase/MS SQL Server pour php5".

cela obligera Laravel à utiliser le pilote dblib au lieu de sqlsrv.

consultez ce fichier pour référence Illuminate\Database\Connectors\SqlServerConnector.php.

  1. ouvrez ce fichier: /etc/freetds/freetds.conf

en dessous de [global] section et sous tds version = 4.2

ajouter tds version = 8.0 (sans; demi-colonne au début de la ligne)

et ajoutez le client charset = UTF-8 juste sous la ligne ci-dessus (sans; demi-colonne au début de la ligne)

Cela permet au pilote d'encoder toutes les données dans utf-8 et d'éviter les caractères étranges dans les données

le fichier ressemblera à ceci:

[global]

        # TDS protocol version

;       tds version = 4.2

        tds version = 8.0

        client charset = UTF-8
  1. créer un fichier locales.conf dans ce répertoire /etc/freetds et au-delà ce qui suit à l'intérieur: (cela permet une analyse correcte des dates avec SQL Server).

[default]

    date format = %Y-%m-%d %I:%M:%S.%z

[en_US]

    date format = %b %e %Y %I:%M:%S:%z%p

    language = us_english

    charset = iso_1

  1. éditez le fichier php.ini

trouver d'abord le fichier avec php -i | grep php.ini

puis ouvrez le fichier et recherchez mssql.charset (ce sera probablement comme désactivé comme ceci ; mssql.charset = "ISO-8859-1" )

make it mssql.charset = "UTF-8" << assurez-vous de supprimer le; semi colonne pour l'activer >>

sauvegarder et quitter

  1. maintenant redémarrez votre serveur (nginx ou Apache ou php-fpm)

  2. bien sûr, vous savez que vous devez définir la configuration de la base de données pour utiliser sqlsrv par défaut 'default' => 'sqlsrv', et ajoutez vos informations d'identification.


AUTRES MÉTHODES:

vous pouvez utiliser ODBC driver pour vous connecter

voici un joli package https://github.com/ccovey/odbc-driver

18
Mahmoud Zalt

Pour Linux, Laravel 5 et php 7.1:

  1. Ajouter une connexion comme dit ici
  2. Sudo apt install php7.1-sybase
  3. Réessayer :)
1
insign