共用方式為


如何:指定 PHP 資料類型

以下步驟摘要列出當從伺服器擷取資料時,如何使用 SQL Server Driver for PHP 來指定 PHP 資料類型:

  1. 使用 sqlsrv_query 或是 sqlsrv_prepare/sqlsrv_execute 的組合來設定及執行 Transact-SQL 查詢。
  2. 使用 sqlsrv_fetch 讓資料列可供讀取。
  3. 使用 sqlsrv_get_field (將所要的 PHP 資料類型指定為選擇性的第三個參數) 來從傳回的資料列擷取欄位資料。如果未指定選擇性的第三個參數,將會根據預設 PHP 類型傳回資料。如需有關預設 PHP 傳回類型的資訊,請參閱<預設 PHP 資料類型>。
    如需有關用來指定 PHP 資料類型之常數的詳細資訊,請參閱<SQLSRV 常數>的<PHPTYPE>一節。

範例

下列範例會從 AdventureWorks 資料庫的 Production.ProductReview 資料表擷取資料列。在每一個傳回的資料列中,ReviewDate 欄位會當做字串來擷取,而且 Comments 欄位會當做資料流來擷取。資料流資料會使用 PHP fpassthru 函數來顯示。

此範例假設 SQL Server 和 AdventureWorks 資料庫已經安裝在本機電腦上。當從命令列執行此範例時,所有輸出都會寫入主控台。

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

在此範例中,將第二個欄位 (ReviewDate) 當做字串來擷取時,會保留 SQL Server DATETIME 資料類型的毫秒精確度。根據預設,SQL Server DATETIME 資料類型會當做 PHP DateTime 物件來擷取,這樣會遺失毫秒精確度。

將第四個欄位 (Comments) 當做資料流來擷取是為了示範用途。根據預設,SQL Server 資料類型 nvarchar(3850) 會當做字串來擷取,這對於大多數的狀況都是可接受的。

注意

sqlsrv_field_metadata 函數在執行查詢之前會提供一個方式來取得欄位資訊,包括類型資訊。

另請參閱

工作

如何:擷取輸出參數
如何:擷取輸入/輸出參數

概念

有關文件集中的程式碼範例

其他資源

擷取資料