Bonjour à tous,

Je suis actuellement en stage et pour un projet j'ai besoin d'utiliser une base de données sous SQL Server et mon application tourne sous Symfony 2.8.

Je travail en local via xampp v3.2.2, php est en 5.6.19 et SQL Serveur c'est la version 2014

Coté PHP:
J'ai suivi la procédure que doctrine met sur son site pour utiliser SQL_Server, c'est à dire télécharger le .dll qui correspond à notre version de php sur le site de microsoft, le mettre dans le dossier ext/ et l'activer dans notre php.ini en faisant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
extension=php_sqlsrv_56_ts.dll
extension=php_pdo_sqlsrv_56_ts.dll
Jusque là tout va bien, quand je fais

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
<?php
print_r(PDO::getAvailableDrivers());
?>
Il me retourne bien un tableau avec écrit

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Array ( [0] => mysql [1] => pgsql [2] => sqlite [3] => sqlsrv )
Ce qui veut bien dire que l'extension est activée.

Coté SQL Server:

j'ai autorisé les connexions à distance et j'ai activé le mode d'authentification SQL Server et Windows.

J'ai créé une nouvelle connexion et une base de données.

Les protocoles clients TCP/IP sont activés et à l'écoute sur le port 1433.

Tentative de connexion:

J'ai voulu tester de me connecter directement à partir d'un fichier php avant d'utiliser Symfony pour voir si ça fonctionne.

Quand j'établi une connexion sqlsrv classique je n'ai pas de problème

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$serverName = "PC-PRESTA-CRM\SQLEXPRESS";
$connectionInfo = array( "Database"=>'testSymfony',"UID"=>'UserTest',"PWD"=>'toto');
    $conn = sqlsrv_connect( $serverName, $connectionInfo);
 
    if(!$conn) {die('Erreur de connexion à MSSQL');}
    else{echo "Connexion OK";}
 
    //RECUPERATION DATA
    $sql = "SELECT * FROM test";
 
    $stmt = sqlsrv_query( $conn, $sql);
    if( $stmt === false ) {
         die( print_r( sqlsrv_errors(), true));
    }
 
    while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
          echo $row['test']."<br />";
    }
J'arrive à me connecter et à récupérer le contenu de la table que j'ai créée. Le problème arrive quand je veux créer une connexion via pdo_sqlsrv.

Pour ça je fais:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$db = new PDO("sqlsrv:Server=127.0.0.1 (ou PC-PRESTA-CRM\SQLEXPRESS), 1433;Database=testSymfony", "UserTest", "toto");
En retour j'ai une erreur

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08001]: [Microsoft][ODBC Driver 11 for SQL Server]Fournisseur TCP : Aucune connexion n’a pu être établie car l’ordinateur cible l’a expressément refusée. ' in C:\xampp\htdocs\test.php:50 Stack trace: #0 C:\xampp\htdocs\test.php(50): PDO->__construct('sqlsrv:Server=1...', 'UserTest', 'toto') #1 {main} thrown in C:\xampp\htdocs\test.php on line 50
J'ai du mal à comprendre pourquoi j'ai l'accès sans utiliser PDO, mais que je ne l'ai plus avec ? Il faut modifier quelque chose dans la configuration SQL Server ?

Si quelqu'un pouvait m'éclairer ça serait super.

J'imagine qu'une fois la connexion pdo établie, pour doctrine ça sera simple à mettre en oeuvre.

En tout cas merci de prendre le temps de me répondre.