Procedura: Specificare i tipi di dati di SQL Server con il driver SQLSRV

Download del driver PHP

In questo argomento viene illustrato come usare il driver SQLSRV per specificare il tipo di dati di SQL Server per i dati inviati al server. Le informazioni di questo argomento non si applicano al driver PDO_SQLSRV.

Per specificare il tipo di dati di SQL Server, è necessario usare la matrice facoltativa $params per la preparazione o l'esecuzione di una query che inserisce o aggiorna i dati. Per informazioni dettagliate sulla struttura e la sintassi della matrice $params , vedere sqlsrv_query o sqlsrv_prepare.

Di seguito sono elencati i passaggi principali per la specifica del tipo di dati di SQL Server durante l'invio di dati al server:

Nota

Se non viene specificato alcun tipo di dati di SQL Server vengono usati i tipi predefiniti. Per altre informazioni sui tipi di dati di SQL Server predefiniti, vedere Default SQL Server Data Types.

  1. Definire una query Transact-SQL che inserisce o aggiorna i dati. Usare i punti interrogativi (?) come segnaposto per i valori dei parametri nella query.

  2. Inizializzare o aggiornare le variabili PHP che corrispondono ai segnaposto della query Transact-SQL.

  3. Costruire la matrice $params da usare durante la preparazione o l'esecuzione della query. Si noti che ogni elemento della matrice $params deve essere una matrice quando si specifica il tipo di dati di SQL Server.

  4. Specificare il tipo di dati di SQL Server desiderato usando la costante SQLSRV_SQLTYPE_* appropriata come quarto parametro in ogni matrice secondaria della matrice $params. Per un elenco completo delle costanti SQLSRV_SQLTYPE_*, vedere la sezione Costanti SQLTYPE in Costanti (driver Microsoft per PHP per SQL Server). Ad esempio, nel codice seguente, $changeDate, $ratee $payFrequency sono specificati rispettivamente come tipi di SQL Server datetime, moneye tinyint nella matrice $params . Poiché non è specificato alcun tipo di SQL Server per $employeeId che viene inizializzato su un numero intero, viene usato il tipo di SQL Server predefinito integer .

    $employeeId = 5;  
    $changeDate = "2005-06-07";  
    $rate = 30;  
    $payFrequency = 2;  
    $params = array(  
                array($employeeId, null),  
                array($changeDate, null, null, SQLSRV_SQLTYPE_DATETIME),  
                array($rate, null, null, SQLSRV_SQLTYPE_MONEY),  
                array($payFrequency, null, null, SQLSRV_SQLTYPE_TINYINT)  
              );  
    

Esempio

L'esempio seguente inserisce i dati nella tabella HumanResources.EmployeePayHistory del database AdventureWorks. I tipi di SQL Server sono specificati per i parametri $changeDate, $ratee $payFrequency . Il tipo di SQL Server predefinito viene usato per il parametro $employeeId . Per verificarne il corretto inserimento, i dati vengono recuperati e visualizzati.

L'esempio presuppone che SQL Server e il database AdventureWorks siano installati 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 and   
specify the AdventureWorks database as the database in use. */  
$serverName = "(local)";  
$connectionInfo = array( "Database"=>"AdventureWorks");  
$conn = sqlsrv_connect( $serverName, $connectionInfo);  
if( $conn === false )  
{  
     echo "Could not connect.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Define the query. */  
$tsql1 = "INSERT INTO HumanResources.EmployeePayHistory (EmployeeID,  
                                                        RateChangeDate,  
                                                        Rate,  
                                                        PayFrequency)  
           VALUES (?, ?, ?, ?)";  
  
/* Construct the parameter array. */  
$employeeId = 5;  
$changeDate = "2005-06-07";  
$rate = 30;  
$payFrequency = 2;  
$params1 = array(  
               array($employeeId, null),  
               array($changeDate, null, null, SQLSRV_SQLTYPE_DATETIME),  
               array($rate, null, null, SQLSRV_SQLTYPE_MONEY),  
               array($payFrequency, null, null, SQLSRV_SQLTYPE_TINYINT)  
           );  
  
/* Execute the INSERT query. */  
$stmt1 = sqlsrv_query($conn, $tsql1, $params1);  
if( $stmt1 === false )  
{  
     echo "Error in execution of INSERT.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Retrieve the newly inserted data. */  
/* Define the query. */  
$tsql2 = "SELECT EmployeeID, RateChangeDate, Rate, PayFrequency  
          FROM HumanResources.EmployeePayHistory  
          WHERE EmployeeID = ? AND RateChangeDate = ?";  
  
/* Construct the parameter array. */  
$params2 = array($employeeId, $changeDate);  
  
/*Execute the SELECT query. */  
$stmt2 = sqlsrv_query($conn, $tsql2, $params2);  
if( $stmt2 === false )  
{  
     echo "Error in execution of SELECT.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Retrieve and display the results. */  
$row = sqlsrv_fetch_array( $stmt2 );  
if( $row === false )  
{  
     echo "Error in fetching data.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
echo "EmployeeID: ".$row['EmployeeID']."\n";  
echo "Change Date: ".date_format($row['RateChangeDate'], "Y-m-d")."\n";  
echo "Rate: ".$row['Rate']."\n";  
echo "PayFrequency: ".$row['PayFrequency']."\n";  
  
/* Free statement and connection resources. */  
sqlsrv_free_stmt($stmt1);  
sqlsrv_free_stmt($stmt2);  
sqlsrv_close($conn);  
?>  

Vedi anche

Recupero di dati

Informazioni sugli esempi di codice nella documentazione

Procedura: Specificare i tipi di dati PHP

Conversione dei tipi di dati

Procedura: Inviare e recuperare dati UTF-8 con il supporto incorporato di UTF-8