- Installation de PHP et du driver pour SQL Server
J’ai un peu joué avec vingt façons de faire donc je ne vous donnerai pas de recette miracle, mais le Web Platform Installer devrait fonctionner pour l’installation de PHP. J’ai installé une 5.3 et une 5.2.10 (toutes les deux en version non threadsafe, puisque ça se marie bien avec FastCGI). Pour le driver PHP SQL Server vous le trouverez sur CodePlex, les instructions d’installation sont claires.
- Utilisation du driver pour attaquer une base SQL Express 2008
Je suis certain que le code est bourré de maladresses, mais c’est un premier essai. A noter que j’ai pris une authentification par login/password, de façon à pouvoir porter le code directement pour SQL Azure (qui ne supporte pas encore d’authentification fédérée) :
<h1>Test de connexion sql server</h1>
<?php
// Infos de connexion
$server = "localhost\sqlExpress";
$user = "monuser";
$pass = "monMotDePasse";
$database = "Northwind";
// connexion a la base
$connectionoptions = array(
"Database" => $database,
"UID" => $user,
"PWD" => $pass,
"MultipleActiveResultSets" => "0");
$conn = sqlsrv_connect($server, $connectionoptions)
or die ( print_r( sqlsrv_errors() ));
// Creation et execution de la requete
$tsql = "SELECT * from Employees";
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false )
{
echo "Impossible d'executer la requete.</br>";
die( print_r( sqlsrv_errors()));
}
// Affichage des resultats
while( $row = sqlsrv_fetch_array($stmt))
{
echo "Nom : ".$row["FirstName"].", ";
echo "Prenom : ".$row["LastName"]."<br/>";
}
// Un peu de menage
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>

A noter : j’ai désactivé MultipleActiveResultSet qui ne fouctionne pas sur Sql Azure avec les versions que j’ai, mais je n’ai pas creusé plus les raisons. Le résultat de cette page n’est pas superimpressionnant, mais ça fonctionne pas mal:
- Utilisation du driver pour attaquer SQL Azure
Modulo les petites précautions prises plus haut (retouche du script, passage de login/password, et désactivation de MARS), il n’y a pas de modifications à apporter au script, j’ai juste retouché 3 lignes :
<h1>Test de connexion sql azure</h1>
<?php
// Infos de connexion
$server = "monserveur.ctp.database.windows.net";
$user = "monuser@monserveur";
$pass = "monMotDePasse";
$database = "Northwind";
…

Le résultat, sans grande surprise :
Un dernier détail : puisque nous ne sommes plus dans un périmètre sûr, il est malsain de passer un username/password en clair. Modifiez votre chaine de connexion pour demander un chiffrement quand vous travaillez sur SQL Azure :
// connexion a la base
$connectionoptions = array(
"Database" => $database,
"UID" => $user,
"PWD" => $pass,
"MultipleActiveResultSets" => "0",
"Encrypt" => "1");
$conn = sqlsrv_connect($server, $connectionoptions)
or die ( print_r( sqlsrv_errors() ));