Partager via


Procédure : Spécifier des types de données SQL Server (pilote SQLSRV)

Télécharger le pilote PHP

Cette rubrique montre comment utiliser le pilote SQLSRV pour spécifier le type de données SQL Server pour les données envoyées au serveur. Cette rubrique ne s’applique pas à une utilisation du pilote PDO_SQLSRV.

Pour spécifier le type de données SQL Server, vous devez utiliser le tableau $params facultatif quand vous préparez ou exécutez une requête qui insère ou met à jour des données. Pour plus d’informations sur la structure et la syntaxe du tableau $params , consultez sqlsrv_query ou sqlsrv_prepare.

Les étapes suivantes récapitulent la manière de spécifier le type de données SQL Server lors de l’envoi de données au serveur :

Notes

Si aucun type de données SQL Server n’est spécifié, les types par défaut sont utilisés. Pour plus d’informations sur les types de données SQL Server par défaut, consultez Default SQL Server Data Types.

  1. Définissez une requête Transact-SQL qui insère ou met à jour des données. Utilisez des points d’interrogation (?) en tant qu’espaces réservés pour les valeurs de paramètre dans la requête.

  2. Initialisez ou mettez à jour les variables PHP qui correspondent aux espaces réservés dans la requête Transact-SQL.

  3. Construisez le tableau $params à utiliser lors de la préparation ou l’exécution de la requête. Notez que chaque élément du tableau $params doit également être un tableau quand vous spécifiez le type de données SQL Server.

  4. Spécifiez le type de données SQL Server souhaité en utilisant la constante SQLSRV_SQLTYPE_* appropriée comme quatrième paramètre dans chaque sous-tableau du tableau $params. Pour obtenir la liste complète des constantes SQLSRV_SQLTYPE_*, consultez la section SQLTYPE de Constantes (Pilotes Microsoft pour PHP pour SQL Server). Par exemple, dans le code ci-dessous, $changeDate, $rateet $payFrequency sont respectivement spécifiés en tant que types SQL Server datetime, moneyet tinyint dans le tableau $params . Étant donné qu’aucun type SQL Server n’est spécifiée pour $employeeId et que ce paramètre est initialisé à un entier, le type SQL Server par défaut integer est utilisé.

    $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)  
              );  
    

Exemple

L’exemple suivant insère des données dans la table HumanResources.EmployeePayHistory de la base de données AdventureWorks. Les types SQL Server sont spécifiés pour les paramètres $changeDate, $rateet $payFrequency . Le type SQL Server par défaut est utilisé pour le paramètre $employeeId . Pour vérifier que les données ont été correctement insérées, les mêmes données sont récupérées et affichées.

Cet exemple part du principe que SQL Server et la base de données AdventureWorks sont installés 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 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);  
?>  

Voir aussi

Récupération de données

À propos des exemples de code dans la documentation

Procédure : Spécifier des types de données PHP

Conversion de types de données

Procédure : Envoyer et récupérer des données UTF-8 à l’aide de la prise en charge UTF-8 intégrée