方法:SQLSRV ドライバーを使用する場合に SQL Server データ型を指定する

PHP ドライバーのダウンロード

このトピックでは、SQLSRV ドライバーを使用して、サーバーに送信されるデータの SQL Server データ型を指定する方法を説明します。 このトピックは、PDO_SQLSRV ドライバーを使用する場合は適用しません。

SQL Server データ型を指定するには、データを挿入または更新するクエリを準備または実行する際に、省略可能な $params 配列を使用する必要があります。 $params 配列の構造と構文の詳細については、 sqlsrv_query または sqlsrv_prepareを参照してください。

次の手順は、データをサーバーに送信する際に、SQL Server データ型を指定する方法をまとめています。

注意

SQL Server データ型を指定しない場合、既定の型が使用されます。 既定の SQL Server データ型については、「 Default SQL Server Data Types」を参照してください。

  1. データを挿入または更新する Transact-SQL クエリを定義します。 クエリでパラメーター値のプレースホルダーとして疑問符 (?) を使用します。

  2. Transact-SQL クエリ内のプレースホルダーに対応する PHP 変数を初期化または更新します。

  3. クエリを準備または実行するときに使用する $params 配列を構築します。 SQL Server データ型を指定するときに、 $params 配列の各要素も配列にする必要があります。

  4. 目的の SQL Server データ型を指定するには、$params 配列の各サブ配列の 4 番目のパラメーターとして、適切な SQLSRV_SQLTYPE_* 定数を使用します。 SQLSRV_SQLTYPE_* 定数の完全な一覧については、「定数 (Microsoft Drivers for PHP for SQL Server)」の「SQLTYPE」セクションを参照してください。 たとえば、下のコードで、 $changeDate$rate、および $payFrequency は、 $params配列に、それぞれ SQL Server 型 datetimemoney 、および 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);  
?>  

参照

データの取得

ドキュメントのコード例について

方法:PHP データ型を指定する

データ型の変換

方法:組み込みの UTF-8 サポートを使用した UTF-8 データの送信と取得