Partager via


Procédure : récupérer des données binaires sous forme de flux

Le Pilote SQL Server pour PHP tire parti des flux de données PHP pour récupérer de grandes quantités de données binaires du serveur. Cette rubrique montre comment récupérer des données binaires sous forme de flux.

Le recours aux flux pour récupérer des données binaires (des images, par exemple) permet d'éviter d'utiliser de grandes quantités de mémoire de script en récupérant des segments de données au lieu de charger l'objet entier dans la mémoire du script.

Exemple

L'exemple suivant récupère des données binaires (dans le cas présent, une image) à partir de la table Production.ProductPhoto de la base de données AdventureWorks. L'image est récupérée sous forme de flux et affichée dans le navigateur.

La récupération des données image sous forme de flux est effectuée via l'utilisation de sqlsrv_fetch et sqlsrv_get_field avec le type de retour spécifié sous forme de flux binaire. Le type de retour est spécifié en utilisant la constante SQLSRV_PHPTYPE_STREAM. Pour plus d'informations sur les constantes sqlsrv, consultez Constantes SQLSRV.

L'exemple suppose que SQL Server et la base de données AdventureWorks sont installés sur l'ordinateur local. Toutes les données de sortie sont écrites dans le navigateur lorsque l'exemple est exécuté à partir de ce dernier.

<?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));
}

/* Set up the Transact-SQL query. */
$tsql = "SELECT LargePhoto 
         FROM Production.ProductPhoto 
         WHERE ProductPhotoID = ?";

/* Set the parameter values and put them in an array. */
$productPhotoID = 70;
$params = array( $productPhotoID);

/* Execute the query. */
$stmt = sqlsrv_query($conn, $tsql, $params);
if( $stmt === false )
{
     echo "Error in statement execution.</br>";
     die( print_r( sqlsrv_errors(), true));
}

/* Retrieve and display the data.
The return data is retrieved as a binary stream. */
if ( sqlsrv_fetch( $stmt ) )
{
   $image = sqlsrv_get_field( $stmt, 0, 
                      SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY));
   header("Content-Type: image/jpg");
   fpassthru($image);
}
else
{
     echo "Error in retrieving data.</br>";
     die(print_r( sqlsrv_errors(), true));
}

/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>

La définition du type de retour dans l'exemple montre comment spécifier le type de retour PHP sous forme de flux binaire. Techniquement, elle n'est pas requise dans l'exemple, car le champ LargePhoto possède le type SQL Server varbinary(max) et est par conséquent retourné sous forme de flux binaire par défaut. Pour plus d'informations sur les types de données PHP par défaut, consultez Types de données PHP par défaut. Pour plus d'informations sur la façon de spécifier les types de retour PHP, consultez Procédure : spécifier les types de données PHP.

Voir aussi

Concepts

À propos des exemples de code dans la documentation

Autres ressources

Récupération des données
Récupération des données sous forme de flux