Vorgehensweise: PHP-Datentypen festlegen

PHP-Treiber herunterladen

Wenn Sie den PDO_SQLSRV-Treiber verwenden, können Sie mittels „PDOStatement::bindColumn“ und „PDOStatement::bindParam“ den PHP-Datentyp festlegen, wenn Sie Daten vom Server abrufen. Weitere Informationen finden Sie unter PDOStatement::bindColumn und PDOStatement::bindParam .

Die folgenden Schritten zeigen zusammenfassend, wie PHP-Datentypen beim Abruf vom Server mit dem SQLSRV-Treiber festgelegt werden:

  1. Richten Sie eine Transact-SQL-Abfrage mit sqlsrv_query oder der Kombination aus sqlsrv_prepare/sqlsrv_execute ein, und führen Sie sie aus.

  2. Stellen Sie eine Datenzeile für das Lesen mit sqlsrv_fetchbereit.

  3. Verwenden Sie sqlsrv_get_field , um die Felddaten einer ausgegebenen Zeile mit dem gewünschten, im dritten optionalen Parameter festgelegten PHP-Datentyp abzurufen. Falls der optionale dritte Parameter nicht festgelegt ist, werden die Daten laut den PHP-Standarddatentypen zurückgegeben. Informationen zu den PHP-Standarddatentypen finden Sie unter Default PHP Data Types.

    Informationen zu den Konstanten, die zur Festlegung der PHP-Datentypen verwendet werden, finden Sie im PHPTYPEs-Abschnitt von Konstanten Microsoft-Treiber für PHP für SQL Server.

Beispiel

Im folgenden Beispiel werden Zeilen von der Production.ProductReview -Tabelle der AdventureWorks-Datenbank abgerufen. In jeder ausgegebenen Zeile wird das ReviewDate-Feld als Zeichenfolge und das Comments-Feld als Stream abgerufen. Die Streamdateien werden mit der PHP fpassthru -Funktion dargestellt.

Das Beispiel setzt voraus, dass SQL Server und die AdventureWorks-Datenbank auf dem lokalen Computer installiert sind. Wenn das Beispiel über die Befehlszeile ausgeführt wird, werden alle Ausgaben in die Konsole 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 ReviewerName,   
                ReviewDate,  
                Rating,   
                Comments   
         FROM Production.ProductReview   
         WHERE ProductID = ?   
         ORDER BY ReviewDate DESC";  
  
/* Set the parameter value. */  
$productID = 709;  
$params = array( $productID);  
  
/* Execute the query. */  
$stmt = sqlsrv_query($conn, $tsql, $params);  
if( $stmt === false )  
{  
     echo "Error in statement execution.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Retrieve and display the data. The first and third fields are  
retrieved according to their default types, strings. The second field  
is retrieved as a string with 8-bit character encoding. The fourth  
field is retrieved as a stream with 8-bit character encoding.*/  
while ( sqlsrv_fetch( $stmt))  
{  
   echo "Name: ".sqlsrv_get_field( $stmt, 0 )."\n";  
   echo "Date: ".sqlsrv_get_field( $stmt, 1,   
                       SQLSRV_PHPTYPE_STRING( SQLSRV_ENC_CHAR))."\n";  
   echo "Rating: ".sqlsrv_get_field( $stmt, 2 )."\n";  
   echo "Comments: ";  
   $comments = sqlsrv_get_field( $stmt, 3,   
                            SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_CHAR));  
   fpassthru( $comments);  
   echo "\n";   
}  
  
/* Free statement and connection resources. */  
sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn);  
?>  

Im Beispiel sorgt der Abruf des zweiten Feldes (ReviewDate) als Zeichenfolge für die Millisekunden-Genauigkeit des SQL Server-Datentyps DATETIME. Standardmäßig wird der SQL Server-Datentyp DATETIME als PHP-DateTime-Objekt abgerufen, wobei die Millisekunden-Genauigkeit verloren geht.

Das vierte Feld (Comments) wird zu Vorführungszwecken als Stream abgerufen. Standardmäßig wird der SQL Server-Datentyp „nvarchar(3850)“ als eine Zeichenfolge abgerufen. Dies ist für die meisten Situationen akzeptabel.

Hinweis

Die sqlsrv_field_metadata -Funktion bietet eine Möglichkeit, Feldinformationen inklusive Feldtypinformationen zu erhalten bevor eine Abfrage durchgeführt wird.

Weitere Informationen

Abrufen von Daten

Informationen zu den Codebeispielen in der Dokumentation

Vorgehensweise: Abrufen von Eingabe-/Ausgabeparametern mit dem SQLSRV-Treiber

Gewusst wie: Abrufen von Eingabe- und Ausgabeparametern mit dem SQLSRV-Treiber