Compartir a través de


Cómo recuperar datos binarios como una secuencia

El Controlador de SQL Server para PHP aprovecha las ventajas de las secuencias de PHP para recuperar grandes cantidades de datos binarios del servidor. En este tema se muestra cómo recuperar datos binarios como una secuencia.

Al usar secuencias para recuperar datos binarios, como por ejemplo las imágenes, se evita el uso de grandes cantidades de memoria script al recuperar fragmentos de datos, en lugar de cargar el objeto entero en memoria script.

Ejemplo

En el siguiente ejemplo se recuperan datos binarios, en este caso una imagen, de la tabla Production.ProductPhoto de la base de datos AdventureWorks. La imagen se recupera como una secuencia y se muestra en el explorador.

Se consiguen recuperar datos de imagen como una secuencia mediante sqlsrv_fetch y sqlsrv_get_field con el tipo de valor devuelto especificado como una secuencia binaria. El tipo de valor devuelto se especifica mediante la constante SQLSRV_PHPTYPE_STREAM. Para obtener información acerca de las constantes de sqlsrv, vea Constantes SQLSRV.

En el ejemplo se supone que SQL Server y la base de datos AdventureWorks están instalados en el equipo local. Cuando se ejecuta el ejemplo desde el explorador, todos los resultados se escriben en el explorador.

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

Al especificar el tipo devuelto en el ejemplo se muestra cómo especificar el tipo de PHP devuelto como una secuencia binaria. Desde el punto de vista técnico, no es necesario en el ejemplo porque el campo LargePhoto tiene el tipo varbinary(max) de SQL Server y, por lo tanto, se devuelve como una secuencia binaria de forma predeterminada. Para obtener información acerca de los tipos de datos predeterminados de PHP, vea Tipos de datos predeterminados de PHP. Para obtener información acerca de cómo especificar los tipos devueltos de PHP, vea Cómo especificar tipos de datos de PHP.

Vea también

Conceptos

Acerca de ejemplos de código en la documentación

Otros recursos

Recuperar datos
Recuperar datos como una secuencia