如何:使用 SQLSRV 驅動程式指定 SQL Server 資料類型
本主題示範如何使用 SQLSRV 驅動程式,為傳送到伺服器的資料指定 SQL Server 資料類型。 使用 PDO_SQLSRV 驅動程式時並不適用本主題。
若要指定 SQL Server 資料類型,您在準備或執行會插入或更新資料的查詢時,必須使用選用 $params 陣列。 如需 $params 陣列之結構和語法的詳細資訊,請參閱 sqlsrv_query 或 sqlsrv_prepare。
下列步驟概述如何在將資料傳送至伺服器時指定 SQL Server 資料類型:
注意
如果未指定 SQL Server 資料類型,則會使用預設類型。 如需預設 SQL Server 資料類型的相關資訊,請參閱 Default SQL Server Data Types。
定義會插入或更新資料的 Transact-SQL 查詢。 在查詢中,請使用問號 (?) 做為參數值的預留位置。
初始化或更新對應至 Transact-SQL 查詢中預留位置的 PHP 變數。
建構在準備或執行查詢時要使用的 $params 陣列。 請注意, $params 陣列的每個元素,在您指定 SQL Server 資料類型時也必須是陣列。
使用適當的 SQLSRV_SQLTYPE_* 常數作為 $params 陣列中每個子陣列的第四個參數,以指定所需的 SQL Server 資料類型。 如需 SQLSRV_SQLTYPE_* 常數的完整清單,請參閱常數 (適用於 SQL Server 的 Microsoft Drivers for PHP) 的 SQLTYPE 一節。 例如,在下方的程式碼中, $changeDate、 $rate和 $payFrequency 分別指定為 $params陣列中的 SQL Server 類型 datetime、 money 和 tinyint 。 由於未指定 $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);
?>