Compartir vía


Procedimientos: Recuperación de datos binarios como secuencia mediante el controlador SQLSRV

Descargar controlador PHP

La recuperación de datos como un flujo solo está disponible en el controlador SQLSRV de Controladores de Microsoft para PHP para SQL Server, pero no en el controlador PDO_SQLSRV.

Los Controladores de Microsoft para PHP para SQL Server aprovechan 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 utilizar las secuencias para recuperar datos binarios, como las imágenes, se evita tener que consumir una gran cantidad de memoria de script, ya que se recuperan los fragmentos de datos en lugar de cargar el objeto entero en la memoria de script.

Ejemplo

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

El proceso de recuperación de los datos de la imagen como una secuencia se realiza utilizando sqlsrv_fetch y sqlsrv_get_field con el tipo de valor devuelto como una secuencia binaria. El tipo de valor devuelto se especifica mediante la constante SQLSRV_PHPTYPE_STREAM. Para información sobre las constantes sqlsrv, consulte Constantes (controladores de Microsoft para PHP para SQL Server).

En el ejemplo se da por hecho que SQL Server y la base de datos AdventureWorks están instalados en el equipo local. Los resultados se agregan al explorador cuando se ejecuta el ejemplo 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 de valor devuelto en el ejemplo, se demuestra cómo especificar el tipo de valor devuelto PHP como una secuencia binaria. Técnicamente, no es necesario en el ejemplo, ya que el campo LargePhoto tiene el tipo de SQL Server varbinary(max) y, por tanto, se devuelve como un flujo binario de manera predeterminada. Para obtener información sobre los tipos de datos PHP predeterminados, consulte Default PHP Data Types. Para obtener información sobre cómo especificar los tipos de valor devueltos PHP, consulte How to: Specify PHP Data Types.

Consulte también

Recuperación de datos

Recuperación de datos como una secuencia con el controlador SQLSRV

Sobre los ejemplos de código de la documentación