方法: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 配列を構築します。 SQL Server データ型を指定するときに、 $params 配列の各要素も配列にする必要があります。
目的の SQL Server データ型を指定するには、$params 配列の各サブ配列の 4 番目のパラメーターとして、適切な SQLSRV_SQLTYPE_* 定数を使用します。 SQLSRV_SQLTYPE_* 定数の完全な一覧については、「定数 (Microsoft Drivers for PHP for SQL Server)」の「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);
?>