Procedura: Configurare la gestione degli errori e degli avvisi usando il driver SQLSRV
In questo argomento viene descritto come configurare il driver SQLSRV per la gestione degli errori e degli avvisi.
Per impostazione predefinita, il driver SQLSRV considera gli avvisi come errori. Una chiamata a una funzione sqlsrv che genera un errore o un avviso restituisce false. Per disabilitare questo comportamento, usare la funzione sqlsrv_configure. Quando la riga di codice seguente è inclusa all'inizio di uno script, una funzione sqlsrv che genera solo avvisi e nessun errore non restituisce false:
sqlsrv_configure("WarningsReturnAsErrors", 0);
La riga di codice seguente reimposta il comportamento predefinito (gli avvisi vengono considerati come errori):
sqlsrv_configure("WarningsReturnAsErrors", 1);
Nota
Gli avvisi che corrispondono ai valori SQLSTATE 01000, 01001, 01003 e 01S02 non vengono mai considerati come errori. Indipendentemente dalla configurazione, una funzione sqlsrv che genera solo gli avvisi che corrispondono a uno di questi stati non restituisce false.
Il valore di WarningsReturnAsErrors può essere impostato anche nel file php.ini. Ad esempio, questa voce nella sezione [sqlsrv]
del file php.ini disabilita il comportamento predefinito.
sqlsrv.WarningsReturnAsErrors = 0
Per informazioni sul recupero delle informazioni su errori e avvisi, vedere sqlsrv_errors e Procedura: Gestire errori e avvisi.
Esempio
L'esempio di codice riportato di seguito descrive come disabilitare il comportamento di gestione degli errori predefinito. L'esempio usa il comando PRINT Transact-SQL per generare un avviso. Per altre informazioni sul comando PRINT, vedere PRINT (Transact-SQL).
Nell'esempio viene innanzitutto illustrato il comportamento di gestione degli errori predefinito eseguendo una query che genera un avviso. L'avviso viene considerato come errore. Dopo aver modificato la configurazione di gestione degli errori, viene eseguita la stessa query. L'avviso non viene considerato come errore.
Nell'esempio si presuppone che SQL Server sia installato nel computer locale. Quando si esegue l'esempio dalla riga di comando, tutto l'output viene scritto nel browser.
<?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);
?>
Vedi anche
Guida alla programmazione per i driver Microsoft per PHP per SQL Server