PHP
Utiliser SQLSRV
Recherche…
Remarques
Le pilote SQLSRV est une extension PHP prise en charge par Microsoft qui vous permet d'accéder aux bases de données Microsoft SQL Server et SQL Azure. C'est une alternative pour les pilotes MSSQL qui étaient obsolètes depuis PHP 5.3 et qui ont été supprimés de PHP 7.
L'extension SQLSRV peut être utilisée sur les systèmes d'exploitation suivants:
- Windows Vista Service Pack 2 ou ultérieur
- Windows Server 2008 Service Pack 2 ou ultérieur
- Windows Server 2008 R2
- Windows 7
L'extension SQLSRV nécessite que le client natif Microsoft SQL Server 2012 soit installé sur le même ordinateur que PHP. Si le client natif Microsoft SQL Server 2012 n'est pas déjà installé, cliquez sur le lien approprié dans la page de documentation "Configuration requise" .
Pour télécharger les derniers pilotes SQLSRV, procédez comme suit: Télécharger
Une liste complète de la configuration système requise pour les pilotes SQLSRV est disponible ici: Configuration requise
Ceux qui utilisent SQLSRV 3.1+ doivent télécharger le pilote Microsoft ODBC 11 pour SQL Server.
Les utilisateurs de PHP7 peuvent télécharger les derniers pilotes depuis GitHub
Microsoft® ODBC Driver 13 pour SQL Server prend en charge Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016 (Aperçu), Analytics Platform System, Azure SQL Database et Azure SQL Data Warehouse.
Créer une connexion
$dbServer = "localhost,1234"; //Name of the server/instance, including optional port number (default is 1433)
$dbName = "db001"; //Name of the database
$dbUser = "user"; //Name of the user
$dbPassword = "password"; //DB Password of that user
$connectionInfo = array(
"Database" => $dbName,
"UID" => $dbUser,
"PWD" => $dbPassword
);
$conn = sqlsrv_connect($dbServer, $connectionInfo);
SQLSRV a également un pilote PDO. Pour vous connecter en utilisant PDO:
$conn = new PDO("sqlsrv:Server=localhost,1234;Database=db001", $dbUser, $dbPassword);
Faire une requête simple
//Create Connection
$conn = sqlsrv_connect($dbServer, $connectionInfo);
$query = "SELECT * FROM [table]";
$stmt = sqlsrv_query($conn, $query);
Note: l'utilisation des crochets []
est pour échapper à la table
mots car c'est un mot réservé . Celles-ci fonctionnent comme les backticks `
MySQL .
Invoquer une procédure stockée
Pour appeler une procédure stockée sur le serveur:
$query = "{call [dbo].[myStoredProcedure](?,?,?)}"; //Parameters '?' includes OUT parameters
$params = array(
array($name, SQLSRV_PARAM_IN),
array($age, SQLSRV_PARAM_IN),
array($count, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT) //$count must already be initialised
);
$result = sqlsrv_query($conn, $query, $params);
Faire une requête paramétrée
$conn = sqlsrv_connect($dbServer, $connectionInfo);
$query = "SELECT * FROM [users] WHERE [name] = ? AND [password] = ?";
$params = array("joebloggs", "pa55w0rd");
$stmt = sqlsrv_query($conn, $query, $params);
Si vous prévoyez d'utiliser la même instruction de requête plus d'une fois, avec des paramètres différents, vous pouvez obtenir la même chose avec les fonctions sqlsrv_prepare()
et sqlsrv_execute()
, comme indiqué ci-dessous:
$cart = array(
"apple" => 3,
"banana" => 1,
"chocolate" => 2
);
$query = "INSERT INTO [order_items]([item], [quantity]) VALUES(?,?)";
$params = array(&$item, &$qty); //Variables as parameters must be passed by reference
$stmt = sqlsrv_prepare($conn, $query, $params);
foreach($cart as $item => $qty){
if(sqlsrv_execute($stmt) === FALSE) {
die(print_r(sqlsrv_errors(), true));
}
}
Récupération des résultats de la requête
Il existe trois manières principales d’obtenir les résultats d’une requête:
sqlsrv_fetch_array ()
sqlsrv_fetch_array()
récupère la ligne suivante en tant que tableau.
$stmt = sqlsrv_query($conn, $query);
while($row = sqlsrv_fetch_array($stmt)) {
echo $row[0];
$var = $row["name"];
//...
}
sqlsrv_fetch_array()
a un second paramètre facultatif pour récupérer différents types de tableaux: SQLSRV_FETCH_ASSOC
, SQLSRV_FETCH_NUMERIC
et SQLSRV_FETCH_BOTH
(par défaut) peuvent être utilisés; chacun renvoie respectivement les tableaux associatifs, numériques, associatifs et numériques.
sqlsrv_fetch_object ()
sqlsrv_fetch_object()
récupère la ligne suivante en tant qu'objet.
$stmt = sqlsrv_query($conn, $query);
while($obj = sqlsrv_fetch_object($stmt)) {
echo $obj->field; // Object property names are the names of the fields from the query
//...
}
sqlsrv_fetch ()
sqlsrv_fetch()
rend la prochaine ligne disponible pour la lecture.
$stmt = sqlsrv_query($conn, $query);
while(sqlsrv_fetch($stmt) === true) {
$foo = sqlsrv_get_field($stmt, 0); //gets the first field -
}
Récupération des messages d'erreur
Lorsqu'une requête est erronée, il est important de récupérer les messages d'erreur renvoyés par le pilote pour identifier la cause du problème. La syntaxe est la suivante:
sqlsrv_errors([int $errorsOrWarnings]);
Cela retourne un tableau avec:
Clé | La description |
---|---|
SQLSTATE | L'état dans lequel se trouve le pilote SQL Server / OBDC |
code | Le code d'erreur SQL Server |
message | La description de l'erreur |
Il est courant d'utiliser la fonction ci-dessus comme ceci:
$brokenQuery = "SELECT BadColumnName FROM Table_1";
$stmt = sqlsrv_query($conn, $brokenQuery);
if ($stmt === false) {
if (($errors = sqlsrv_errors()) != null) {
foreach ($errors as $error) {
echo "SQLSTATE: ".$error['SQLSTATE']."<br />";
echo "code: ".$error['code']."<br />";
echo "message: ".$error['message']."<br />";
}
}
}