分享方式:


如何:使用 SQLSRV 驅動程式指定 SQL Server 資料類型

下載 PHP 驅動程式

本主題示範如何使用 SQLSRV 驅動程式,為傳送到伺服器的資料指定 SQL Server 資料類型。 使用 PDO_SQLSRV 驅動程式時並不適用本主題。

若要指定 SQL Server 資料類型,您在準備或執行會插入或更新資料的查詢時,必須使用選用 $params 陣列。 如需 $params 陣列之結構和語法的詳細資訊,請參閱 sqlsrv_querysqlsrv_prepare

下列步驟概述如何在將資料傳送至伺服器時指定 SQL Server 資料類型:

注意

如果未指定 SQL Server 資料類型,則會使用預設類型。 如需預設 SQL Server 資料類型的相關資訊,請參閱 Default SQL Server Data Types

  1. 定義會插入或更新資料的 Transact-SQL 查詢。 在查詢中,請使用問號 (?) 做為參數值的預留位置。

  2. 初始化或更新對應至 Transact-SQL 查詢中預留位置的 PHP 變數。

  3. 建構在準備或執行查詢時要使用的 $params 陣列。 請注意, $params 陣列的每個元素,在您指定 SQL Server 資料類型時也必須是陣列。

  4. 使用適當的 SQLSRV_SQLTYPE_* 常數作為 $params 陣列中每個子陣列的第四個參數,以指定所需的 SQL Server 資料類型。 如需 SQLSRV_SQLTYPE_* 常數的完整清單,請參閱常數 (適用於 SQL Server 的 Microsoft Drivers for PHP) 的 SQLTYPE 一節。 例如,在下方的程式碼中, $changeDate$rate$payFrequency 分別指定為 $params陣列中的 SQL Server 類型 datetimemoneytinyint 。 由於未指定 $employeeId 的 SQL Server 類型,而且它初始化為整數,因此會使用預設的 SQL Server 類型 integer

    $employeeId = 5;  
    $changeDate = "2005-06-07";  
    $rate = 30;  
    $payFrequency = 2;  
    $params = array(  
                array($employeeId, null),  
                array($changeDate, null, null, SQLSRV_SQLTYPE_DATETIME),  
                array($rate, null, null, SQLSRV_SQLTYPE_MONEY),  
                array($payFrequency, null, null, SQLSRV_SQLTYPE_TINYINT)  
              );  
    

範例

下列範例會在 AdventureWorks 資料庫的 HumanResources.EmployeePayHistory 資料表中插入資料。 對於 $changeDate$rate$payFrequency 參數,會指定 SQL Server 類型。 對於 $employeeId 參數會使用預設 SQL Server 類型。 若要確認資料已成功插入,可以擷取和顯示相同的資料。

此範例假設本機電腦上已安裝 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));  
}  
  
/* Define the query. */  
$tsql1 = "INSERT INTO HumanResources.EmployeePayHistory (EmployeeID,  
                                                        RateChangeDate,  
                                                        Rate,  
                                                        PayFrequency)  
           VALUES (?, ?, ?, ?)";  
  
/* Construct the parameter array. */  
$employeeId = 5;  
$changeDate = "2005-06-07";  
$rate = 30;  
$payFrequency = 2;  
$params1 = array(  
               array($employeeId, null),  
               array($changeDate, null, null, SQLSRV_SQLTYPE_DATETIME),  
               array($rate, null, null, SQLSRV_SQLTYPE_MONEY),  
               array($payFrequency, null, null, SQLSRV_SQLTYPE_TINYINT)  
           );  
  
/* Execute the INSERT query. */  
$stmt1 = sqlsrv_query($conn, $tsql1, $params1);  
if( $stmt1 === false )  
{  
     echo "Error in execution of INSERT.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Retrieve the newly inserted data. */  
/* Define the query. */  
$tsql2 = "SELECT EmployeeID, RateChangeDate, Rate, PayFrequency  
          FROM HumanResources.EmployeePayHistory  
          WHERE EmployeeID = ? AND RateChangeDate = ?";  
  
/* Construct the parameter array. */  
$params2 = array($employeeId, $changeDate);  
  
/*Execute the SELECT query. */  
$stmt2 = sqlsrv_query($conn, $tsql2, $params2);  
if( $stmt2 === false )  
{  
     echo "Error in execution of SELECT.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Retrieve and display the results. */  
$row = sqlsrv_fetch_array( $stmt2 );  
if( $row === false )  
{  
     echo "Error in fetching data.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
echo "EmployeeID: ".$row['EmployeeID']."\n";  
echo "Change Date: ".date_format($row['RateChangeDate'], "Y-m-d")."\n";  
echo "Rate: ".$row['Rate']."\n";  
echo "PayFrequency: ".$row['PayFrequency']."\n";  
  
/* Free statement and connection resources. */  
sqlsrv_free_stmt($stmt1);  
sqlsrv_free_stmt($stmt2);  
sqlsrv_close($conn);  
?>  

另請參閱

擷取資料

關於文件中的程式碼範例

如何:指定 PHP 資料類型

轉換資料類型

如何:使用內建的 UTF-8 支援傳送及擷取 UTF-8 資料