Como configurar o tratamento de erros e avisos usando o driver SQLSRV
Este tópico descreve como configurar o driver SQLSRV para tratar erros e avisos.
Por padrão, o driver SQLSRV trata avisos como erros; uma chamada para uma função sqlsrv que gere um erro ou um aviso retornará false. Para desabilitar esse comportamento, use a função sqlsrv_configure. Quando a seguinte linha de código for incluída no início de um script, uma função sqlsrv que gera apenas avisos (sem erros) não retornará false:
sqlsrv_configure("WarningsReturnAsErrors", 0);
A linha de código a seguir redefine o comportamento padrão (os avisos são tratados como erros):
sqlsrv_configure("WarningsReturnAsErrors", 1);
Observação
Os avisos correspondentes aos valores de SQLSTATE 01000, 01001, 01003 e 01S02 nunca são tratados como erros. Independentemente da configuração, uma função sqlsrv que gera apenas avisos que corresponderem a um desses estados não retornará false.
O valor de WarningsReturnAsErrors também pode ser definido no arquivo php.ini. Por exemplo, esta entrada na seção [sqlsrv]
do arquivo php.ini desativará o comportamento padrão.
sqlsrv.WarningsReturnAsErrors = 0
Para obter informações sobre como recuperar informações de aviso e de erro, consulte sqlsrv_errors e How to: Handle Errors and Warnings.
Exemplo
O exemplo de código a seguir demonstra como desabilitar o comportamento de tratamento de erros padrão. O exemplo usa o comando PRINT do Transact-SQL para gerar um alerta. Para obter mais informações sobre o comando PRINT, veja PRINT (Transact-SQL).
Primeiro, o exemplo demonstra o comportamento de tratamento de erros padrão executando uma consulta que gera um aviso. Esse aviso não é tratado como erro. Depois de alterar a configuração de tratamento de erros, a mesma consulta é executada. O aviso não é tratado como erro.
O exemplo supõe que o SQL Server esteja instalado no computador local. Toda a saída será gravada no console quando o exemplo for executado da linha de comando.
<?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);
?>
Consulte Também
Guia de programação do Microsoft Drivers para PHP para SQL Server