Procédure : Configurer la gestion des erreurs et des avertissements à l’aide du pilote SQLSRV
Cette rubrique décrit comment configurer le pilote SQLSRV pour gérer les erreurs et avertissements.
Par défaut, le pilote SQLSRV traite les avertissements comme des erreurs ; un appel à une fonction sqlsrv qui génère une erreur ou un avertissement retourne false. Pour désactiver ce comportement, utilisez la fonction sqlsrv_configure. Quand la ligne de code suivante est placée au début d’un script, une fonction sqlsrv qui génère uniquement des avertissements (sans aucune erreur) ne retourne pas false :
sqlsrv_configure("WarningsReturnAsErrors", 0);
La ligne de code suivante réinitialise le comportement par défaut (les avertissements sont traités comme des erreurs) :
sqlsrv_configure("WarningsReturnAsErrors", 1);
Notes
Les avertissements qui correspondent aux valeurs SQLSTATE 01000, 01001, 01003 et 01S02 ne sont jamais traités comme des erreurs. Quelle que soit la configuration, une fonction sqlsrv qui génère uniquement des avertissements qui correspondent à l’un de ces états ne retourne pas false.
La valeur de WarningsReturnAsErrors peut également être définie dans le fichier php.ini. Par exemple, cette entrée dans la section [sqlsrv]
du fichier php.ini désactive le comportement par défaut.
sqlsrv.WarningsReturnAsErrors = 0
Pour plus d’informations sur la récupération d’informations d’erreur et d’avertissement, consultez sqlsrv_errors et Procédure : gérer les erreurs et avertissements.
Exemple
L’exemple de code suivant montre comment désactiver le comportement de gestion des erreurs par défaut. L’exemple utilise la commande Transact-SQL PRINT pour générer un avertissement. Pour plus d’informations sur la commande PRINT, consultez PRINT (Transact-SQL).
L’exemple montre d’abord le comportement de gestion des erreurs par défaut en exécutant une requête qui génère un avertissement. Cet avertissement est traité comme une erreur. Après avoir modifié la configuration de la gestion des erreurs, la même requête est exécutée. Cet avertissement n’est pas traité comme une erreur.
L’exemple part du principe que SQL Server est installé sur l’ordinateur local. Toute la sortie est écrite dans la console quand l’exemple est exécuté à partir de la ligne de commande.
<?php
/* Connect to the local server using Windows Authentication. */
$serverName = "(local)";
$conn = sqlsrv_connect( $serverName );
if( $conn === false )
{
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
/* The Transact-SQL PRINT statement can be used to return
informational or warning messages*/
$tsql = "PRINT 'The PRINT statement can be used ";
$tsql .= "to return user-defined warnings.'";
/* Execute the query and print any errors. */
$stmt1 = sqlsrv_query( $conn, $tsql);
if($stmt1 === false)
{
echo "By default, warnings are treated as errors:\n";
/* Dump errors in the error collection. */
print_r(sqlsrv_errors(SQLSRV_ERR_ERRORS));
}
/* Disable warnings as errors behavior. */
sqlsrv_configure("WarningsReturnAsErrors", 0);
/* Execute the same query and print any errors. */
$stmt2 = sqlsrv_query( $conn, $tsql);
if($stmt2 === false)
{
/* Dump errors in the error collection. */
/* Since the warning generated by the query is be treated as
an error, this block of code will not be executed. */
print_r(sqlsrv_errors(SQLSRV_ERR_ERRORS));
}
else
{
echo "After calling ";
echo "sqlsrv_configure('WarningsReturnAsErrors', 0), ";
echo "warnings are not treated as errors.";
}
/*Close the connection. */
sqlsrv_close($conn);
?>
Voir aussi
Guide de programmation pour les pilotes Microsoft pour PHP pour SQL Server