web-dev-qa-db-fra.com

Connecter PHP 7.2 à MS SQL en utilisant sqlsrv

J'essaie d'obtenir une connexion à MS SQL opérationnelle via PHP sur ma machine. J'utilise IIS, PHP 7.2 est installé et MS SQL Express 2017. Ma page Web de base est en cours d'exécution, mais lorsque je clique pour ouvrir la page PHP, la connexion ne fonctionne pas.

session_start();

echo "Hello ";
if (isset($_POST['submit'])) {
    $_SESSION["server"] = $_POST['server'];
    $_SESSION["database"]= $_POST['database'];
    $_SESSION["username"] = $_POST['username'];
    $_SESSION["password"] = $_POST['password'];

    echo $_SESSION["database"];

    //CONNECTION
    $serverName = $_SESSION["server"];
    $connectionInfo["Database"] = $_SESSION["database"];
    $connectionInfo["UID"] = $_SESSION["username"];
    $connectionInfo["PWD"] = $_SESSION["password"];

    echo "midway";

    $conn = sqlsrv_connect($serverName, $connectionInfo);

    echo "Bye";
}

Lorsque je lance ceci, je reçois "Bonjour les dimensions intermédiaires", ce qui suggère que la page fonctionne jusqu'à ce qu'elle atteigne la ligne de connexion.
Je ne sais pas quelle extension sqlsrv utiliser.
J'ai regardé autour de moi et je peux voir les versions pour 7 et 7.1 mais pas pour 7.2.

J'ai ajouté dans extension=php_sqlsrv_71_nts_x86.dll au bas de php.ini (et le fichier existe dans C:\Program Files (x86)\PHP\v7.2\ext).

Tous les pointeurs seraient reçus avec reconnaissance. J'ai passé quelques jours là-dessus et je ne pense pas que je vais nulle part.
Merci

4
Daves

J'ai fait face au même problème. Plus tard, j'ai découvert que j'utilisais une ancienne version de fichiers Microsoft SQL pour PHP.

Pour PHP 7.2, vous devez utiliser la version 7.2 de MS PHP SQL.

Cette version n'est pas disponible sur le site Web de Microsoft. Je l'ai trouvé ici https://github.com/Microsoft/msphpsql/releases

Une fois que j'ai utilisé ces fichiers, tout fonctionne bien. J'ai utilisé des fichiers 64 bits.

Ensuite, vous devez ajouter ces lignes dans le fichier php.ini

extension = php_sqlsrv_72_nts.dll

extension = php_pdo_sqlsrv_72_nts.dll 

9
Crennotech

Je l'ai résolu ~ PHP Version 7.2.4

pdo_sqlsrv: 5.3.0 + 11108

1.téléchargez la version appropriée sqlsrv et sqlsrv pdo

2.mettez-le dans le dossier XAMPP\PHP\ext

3.après cela, écrivez la ligne dans php.ini> paramètre du module

extension = php_pdo_sqlsrv_72_ts.dll

extension = php_sqlsrv_72_ts.dll

4. Faites un test pour MSSQL mais il y a toujours un message d'erreur pour vous recommander de télécharger le pilote ODBC pour SQL

5.Allez sur https://docs.Microsoft.com/zh-tw/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-2017 téléchargez ensuite le bon dossier 

(le mien est Command Line Utilities 11 pour SQL Server® X86)

6.fire le test.php encore une fois tout fonctionne!

2
Let's Yo

Ce que vous devez déterminer sont

  • Quelle version de PHP
  • Le runtime que vous utilisez est Thread Safe ou Non-Thread Safe
  • Le runtime que vous utilisez est 64 bits ou 32 bits

Ensuite, vous devez regarder la page de besoin ici

Vérifiez la version de PHP que vous utilisez, préférez donc votre question, cela signifie PHP 7.2 quelle extension SQL Server version 5.3 est la meilleure solution.

Ensuite, allez à page de téléchargement , sélectionnez le lien spécifique à la version que vous préférez. (dans cette question est 5.3)

Le fichier que vous avez téléchargé sera un fichier EXE auto-extractible, puis extrait à l'emplacement souhaité.

vous verrez une liste de fichiers dll comme ceux-ci ...

php_pdo_sqlsrv_7_nts_x64.dll
php_pdo_sqlsrv_7_nts_x86.dll
php_pdo_sqlsrv_7_ts_x64.dll
php_pdo_sqlsrv_7_ts_x86.dll
...
php_sqlsrv_72_ts_x86.dll

Quelle est la signification du nom de ces fichiers?

Comme je l'ai déjà dit, il vous faut déterminer le fichier d'extension approprié. L'extension SQL Server nécessite 2 fichiers dont le nom commence par php_pdo_sqlsrv_xxx et php_sqlsrv_xxx.

Le numéro suivant correspond à votre version PHP, dans ce cas PHP 7.2, vous devez donc choisir le nom de fichier qui a _72_ dans son nom.

Le numéro suivant signifie pour votre runtime Thread Safe ou Non-Thread Safe, qui est spécifique dans le nom de fichier _ts_ (Thread Safe) ou _nts_ (Non-Thread Safe).

Le chiffre suivant signifie pour votre exécution 32 bits ou 64 bits, qui sont spécifiques dans le nom de fichier _x86 (32 bits) ou _x64 (64 bits).

Vérifiez donc votre environnement PHP avec phpinfo(), ou exécutez la commande php --version sur votre console, puis remarquez le message affiché. Pour mon ordinateur, il ressemble à ceci ...

PHP 7.2.12 (cli) (built: Nov  8 2018 06:12:12) ( ZTS MSVC15 (Visual C++ 2017) x86 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

D'après ces informations, j'ai obtenu PHP 7.2, ZTS signifiant Thread Safe (Non-Thread Safe sera NTS), et x86 est 32 bits.

Donc, ce que je dois choisir, c'est l'extension qui est php_sqlsrv_72_ts_x86.dll et php_pdo_sqlsrv_72_ts_x86.dll

Final: copiez-les dans votre dossier /php/ext et éditez php.ini avec ces 2 noms de fichiers.

// example with my case
extension=php_pdo_sqlsrv_72_ts_x86
extension=php_sqlsrv_72_ts_x86

Enregistrez ensuite le fichier php.ini, puis redémarrez votre serveur.

Testez votre résultat en regardant phpinfo.php, qui DOIT avoir pdo_sqlsrv dans la page. Cela signifie que votre environnement peut exécuter PHP et se connecter à SQL Server maintenant.

2
Natta Wang

J'ai finalement trouvé la solution. Tout ce que vous avez à faire est d'utiliser ces extensions dans le fichier php.ini

php_sqlsrv_72_ts_x86.dll

php_pdo_sqlsrv_72_ts_x86.dll

et redémarrez votre XAMPP.

P.S. "J'utilise PHP 7.2.5" 

1
Ravi Sigdel