次の方法で共有


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

次の手順は、サーバーからデータを取得するときに、SQL Server Driver for PHP を使用して PHP データ型を指定する方法をまとめたものです。

  1. sqlsrv_query、または sqlsrv_preparesqlsrv_execute の組み合わせを使用し、Transact-SQL クエリを設定して実行します。
  2. sqlsrv_fetch を使用して、データの行を読み取り可能にします。
  3. sqlsrv_get_field を使用し、目的の PHP データ型をオプションの 3 番目のパラメータとして指定して、返される行からフィールド データを取得します。オプションの 3 番目のパラメータを指定しない場合、データは既定の 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);
?>

この例では、2 番目のフィールド (ReviewDate) を文字列として取得することで、SQL Server の DATETIME データ型のミリ秒の精度が維持されます。既定では、SQL Server の DATETIME データ型は PHP の DateTime オブジェクトとして取得され、ミリ秒の精度が失われます。

4 番目のフィールド (Comments) をストリームとして取得しているのは、例示のためです。既定では、SQL Server データ型の nvarchar(3850) は文字列として取得されますが、これがほとんどの状況に適しています。

注意

sqlsrv_field_metadata 関数は、クエリを実行する前に、型情報を含むフィールド情報を取得する方法を提供します。

参照

処理手順

出力パラメーターを取得する方法
入出力パラメーターを取得する方法

概念

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

その他のリソース

データの取得