Freigeben über


Vorgehensweise: Abrufen von Binärdaten als Stream mithilfe des SQLSRV-Treibers

PHP-Treiber herunterladen

Das Abrufen von Daten als Stream ist nur im SQLSRV-Treiber von Microsoft-Treiber für PHP für SQL Server und nicht im PDO_SQLSRV-Treiber verfügbar.

Microsoft-Treiber für PHP für SQL Server nutzt PHP-Streams zum Abrufen großer Binärdatenmengen vom Server. Dieses Thema veranschaulicht, wie Binärdaten als Stream abgerufen werden.

Verwenden der Streams zum Abrufen von Binärdaten, z. B. Bildern, verzichtet auf die Verwendung großer Mengen Skriptspeicher, indem nur Datenblöcke und nicht ganze Objekte in den Skriptspeicher geladen werden.

Beispiel

Im folgenden Beispiel werden Binärdaten, z. B. ein Bild, aus der Production.ProductPhoto -Tabelle der AdventureWorks-Datenbank abgerufen. Das Bild wird als Stream abgerufen und im Browser angezeigt.

Das Abrufen von Bilddaten als Stream erfolgt mithilfe von sqlsrv_fetch und sqlsrv_get_field mit einem binären Stream als Rückgabetyp. Der Rückgabetyp wird unter Verwendung der Konstanten SQLSRV_PHPTYPE_STREAM angegeben. Informationen zu sqlsrv-Konstanten finden Sie unter Konstanten (Microsoft-Treiber für PHP für SQL Server).

Das Beispiel setzt voraus, dass SQL Server und die AdventureWorks-Datenbank auf dem lokalen Computer installiert sind. Wenn das Beispiel über den Browser ausgeführt wird, werden alle Ausgaben im Browser geschrieben.

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

Die Angabe des Rückgabetyps im Beispiel veranschaulicht, wie der PHP-Rückgabetyp als binärer Stream angegeben wird. Technisch gesehen ist dieser im Beispiel nicht erforderlich, weil das LargePhoto-Feld den SQL Server-Typ „varbinary(max)“ aufweist und dieser daher standardmäßig als binärer Stream zurückgegeben wird. Informationen zu PHP-Datentypen finden Sie unter Default PHP Data Types. Weitere Informationen zum Angeben von PHP-Rückgabetypen finden Sie unter How to: Specify PHP Data Types.

Weitere Informationen

Abrufen von Daten

Abrufen von Daten als Stream mit dem SQLSRV-Treiber

Informationen zu den Codebeispielen in der Dokumentation