Como configurar o tratamento de erros e avisos usando o driver SQLSRV

Baixar o driver PHP

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

Registrando atividades em log

Guia de programação do Microsoft Drivers para PHP para SQL Server

Referência da API do driver SQLSRV