SQL Server Driver for PHP リファレンス

SQL Server Driver for PHP で実装されている API リファレンスです。 すぐにコードが書けるように、いくつかサンプルコードも含めています。

SQL サーバードライバー for PHP については、 「PHP から MS SQL Server へ接続する方法のまとめとサンプルコード」 にも解説がありますのでご覧ください。

SQL Server Driver for PHP 1.1 リファレンス

sqlsrv_begin_transaction(resource $conn)
トランザクションを開始します。
<?php
$serverName = '.\\SQLEXPRESS';
$connectionInfo = array( 
     'UID' => 'sa',
     'PWD' => 'password goes here',
     'Database' => 'Northwind' 
);

// Open Connection
$conn = sqlsrv_connect( $serverName, $connectionInfo );

if( $conn === false ){
     echo "Could not connect.\n";
     die( print_r( sqlsrv_errors(), true));
}

// トランザクションの開始
if ( !sqlsrv_begin_transaction($conn) ) {
     die( 'Could not begin transaction.' );
}

// クエリの実行とコミット/ロールバック
$params = array( 'Sales Manager', 5);

$tsql = 
     "UPDATE Employees 
     SET Title = ? 
     WHERE EmployeeID = ?";

if( sqlsrv_query( $conn, $tsql, $params ) ) {
     sqlsrv_commit($conn);
}
else {
     sqlsrv_rollback($conn);
}

// Close Connection
sqlsrv_close($conn);
?>

パラメータの $connsqlsrv_connect 関数の戻り値として取得できます。

sqlsrv_cancel(resource $stmt)
ステートメントをキャンセルします。そのステートメントの未処理の結果は破棄されます。
sqlsrv_client_info(resource $conn)
クライアントに関する情報を提供します。

パラメータの $connsqlsrv_connect 関数の戻り値として取得できます。

...
// クライアント/サーバー情報の取得と表示

echo "=== Client Info ===\n";

$client_info = sqlsrv_client_info($conn);

if( $client_info ) {
     foreach( $client_info as $key => $val ) {
          echo "$key - $val\n";
     }
}

echo "=== Server Info ===\n";

$server_info = sqlsrv_server_info($conn);

if( $server_info ) {
     foreach( $server_info as $key => $val ) {
          echo "$key - $val\n";
     }
}
...

上記の実行例は以下の通りです。

> php test.php
=== Client Info ===
DriverDllName - sqlncli10.dll
DriverODBCVer - 03.52
DriverVer - 10.00.2531
ExtensionVer - 1.1.428.1
=== Server Info ===
CurrentDatabase - Northwind
SQLServerVersion - 10.00.2531
SQLServerName - KEISUKE-HP\SQLEXPRESS

sqlsrv_close(resource $conn)
コネクションを閉じ、そのコネクションに関連付けされた全てのリソースを解放します。

パラメータの $connsqlsrv_connect 関数の戻り値として取得できます。

sqlsrv_commit(resource $conn)
トランザクションをコミットします。

パラメータの $connsqlsrv_connect 関数の戻り値として取得できます。

sqlsrv_configure(string $setting, mixed $value)
エラー処理とログ設定を変更します。
設定設定可能な値既定値
WarningsReturnAsErrors true (1)
false (0)
true (1)
LogSubsystems SQLSRV_LOG_SYSTEM_ALL (-1)
SQLSRV_LOG_SYSTEM_CONN (2)
SQLSRV_LOG_SYSTEM_INIT (1)
SQLSRV_LOG_SYSTEM_OFF (0)
SQLSRV_LOG_SYSTEM_STMT (4)
SQLSRV_LOG_SYSTEM_UTIL (8)
SQLSRV_LOG_SYSTEM_OFF (0)
LogSeverity SQLSRV_LOG_SEVERITY_ALL (-1)
SQLSRV_LOG_SEVERITY_ERROR (1)
SQLSRV_LOG_SEVERITY_NOTICE (4)
SQLSRV_LOG_SEVERITY_WARNING (2)
SQLSRV_LOG_SEVERITY_ERROR (1)
sqlsrv_connect(string $serverName [, array $connectionInfo])
コネクションを作成しオープンします。
<?php
$serverName = '.\\SQLEXPRESS';
$connectionInfo = array( 
     'UID' => 'sa',
     'PWD' => 'password goes here',
     'Database' => 'Northwind' 
);

$conn = sqlsrv_connect( $serverName, $connectionInfo );

if( $conn === false ){
     echo "Cound not connect.\n";
     die( print_r( sqlsrv_errors(), true));
}
sqlsrv_errors
直前の操作に関するエラーあるいは警告を返します。
sqlsrv_execute(resource $stmt)
プリペアドステートメントを実行します。
sqlsrv_fetch(resource $stmt[, $row[, $offset]])
次の行を読み込み可能にします。
row
  • SQLSRV_SCROLL_NEXT
  • SQLSRV_SCROLL_PRIOR
  • SQLSRV_SCROLL_FIRST
  • SQLSRV_SCROLL_LAST
  • SQLSRV_SCROLL_ABSOLUTE
  • SQLSRV_SCROLL_RELATIVE
offset SQLSRV_SCROLL_ABSOLUTE または SQLSRV_SCROLL_RELATIVE の場合に指定します。
sqlsrv_fetch_array( resource $stmt[, int $fetchType [, $row[, $offset]]])
次の行のデータを、数値インデックスの配列または連想配列あるいはその両方として返します。デフォルトは両方です。
fetchType
  • SQLSRV_FETCH_NUMERIC
  • SQLSRV_FETCH_ASSOC
  • SQLSRV_FETCH_BOTH
row, offset は sqlsrv_fetch と同様
sqlsrv_fetch_object(resource $stmt [, string $className [, array $ctorParams[, $row[, $offset]]]])
次の行のデータをオブジェクトとして返します。
...

$tsql = 
     "SELECT CustomerID, CompanyName, ContactName 
     FROM customers 
     WHERE companyname LIKE 'T%'";

$stmt = sqlsrv_query( $conn, $tsql );

if( !$stmt ) {
     die( print_r( sqlsrv_errors(), true));
}

while( $obj = sqlsrv_fetch_object( $stmt )) {
     echo "$obj->CompanyName ($obj->ContactName)\n";
}

sqlsrv_free_stmt($stmt);

...
sqlsrv_field_metadata(resource $stmt)
フィールドのメタデータを返します。
$tsql = 
     "SELECT CustomerID, CompanyName, ContactName 
     FROM customers 
     WHERE companyname LIKE 'T%'";

$stmt = sqlsrv_query( $conn, $tsql );

$metadata = sqlsrv_field_metadata( $stmt );

if( $metadata ){
     echo "=== Metadata ===\n";
     foreach( $metadata as $key1 => $val1 ){
          echo "$key1: $val1\n";
          foreach( $val1 as $key2 => $val2){
               echo "\t$key2: " . 
                    ( $key2 == 'Type' 
                         ? my_sqlsrv_type2ename($val2) : $val2 ) 
                    . "\n";
          }
     }     
}

...

function my_sqlsrv_type2ename($type){
     switch($type){
          case 93 : return 'datetime';
          case 91 : return 'date';
          case 12 : return 'varchar';
          case 7 : return 'real';
          case 6 : return 'float';
          case 5 : return 'smallint';
          case 4 : return 'int';
          case 3: return 'decimal';
          case 2 : return 'numeric';
          case 1 : return 'char';
          case -1 : return 'text';
          case -2 : return 'binary';
          case -3 : return 'varbinary';
          case -4 : return 'image';
          case -5 : return 'bigint';
          case -6 : return 'tinyint';
          case -7 : return 'bit';
          case -8 : return 'nchar';
          case -9 : return 'nvarchar';          
          case -10 : return 'ntext';
          case -11 : return 'uniqueidentifier';
          case -152 : return 'xml';
          case -154 : return 'time';
          case -155 : return 'datetimeoffset';
     }

     return '';
}

上記の実行例は次の通り。

> php test.php
=== Metadata ===
0: Array
        Name: CustomerID
        Type: nchar
        Size: 5
        Precision:
        Scale:
        Nullable: 0
1: Array
        Name: CompanyName
        Type: nvarchar
        Size: 40
        Precision:
        Scale:
        Nullable: 0
2: Array
        Name: ContactName
        Type: nvarchar
        Size: 30
        Precision:
        Scale:
        Nullable: 1
sqlsrv_free_stmt(resource $stmt)
ステートメントを閉じ、そのステートメントに関連付けされた全てのリソースを解放します。
sqlsrv_get_config(string $setting)
特定の設定値を返します。
sqlsrv_get_field(resource $stmt, int $fieldIndex [, int $getAsType])
現在の行のフィールドをインデックスによって取得します。PHP が返す型を指定可能です。
sqlsrv_has_rows(resource $stmt)
結果セットがひとつかそれ以上の行を持つかどうか検出します。
sqlsrv_next_result(resource $stmt)
次の結果を処理可能にします。
sqlsrv_num_rows(resource $stmt)
結果セットの行数を返します。
sqlsrv_num_fields(resource $stmt)
アクティブな結果セットのフィールド数を返します。
$tsql = 
     "SELECT CustomerID, CompanyName, ContactName 
     FROM customers 
     WHERE companyname LIKE 'T%'";

$stmt = sqlsrv_query( $conn, $tsql );

echo 'Number of Fields: ' . sqlsrv_num_fields( $stmt ) . "\n"; // 3 が返る
sqlsrv_prepare(resource $conn, string $tsql [, array $params [, array $options]])
実行せずに Transact-SQL を準備します。暗黙的にパラメータをバインドします。

パラメータの $connsqlsrv_connect 関数の戻り値として取得できます。

sqlsrv_query(resource $conn, string $tsql [, array $params [, array $options]])
Transact-SQL クエリを準備し、実行します。

パラメータの $connsqlsrv_connect 関数の戻り値として取得できます。

<?php
$serverName = '.\\SQLEXPRESS';
$connectionInfo = array( 
     'UID' => 'sa',
     'PWD' => 'password',
     'Database' => 'Northwind',
     'TraceFile' => 'C:/Temp/php-driver-trace.txt',
     'TraceOn' => 0
);

$conn = sqlsrv_connect( $serverName, $connectionInfo );

if( $conn === false ){
     echo "Cound not connect.\n";
     die( print_r( sqlsrv_errors() ) );
}

$tsql = 
     "SELECT CustomerID, CompanyName, ContactName 
     FROM customers 
     WHERE companyname LIKE ?";

$params = array('R%');

$stmt = sqlsrv_query( $conn, $tsql, $params );

if( !$stmt ) {
     die( print_r( sqlsrv_errors() ));
}

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC)) {
     echo "$row[1] ($row[2])\n";
}

sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>

上記のコードを test.php とした実行結果例は次の通り。

> php test.php
Rancho grande (Sergio Gutierrez)
Rattlesnake Canyon Grocery (Paula Wilson)
Reggiani Caseifici (Maurizio Moroni)
Ricardo Adocicados (Janete Limeira)
Richter Supermarkt (Michael Holz)
Romero y tomillo (Alejandra Camino)
sqlsrv_rollback(resource $conn)
トランザクションをロールバックします。

パラメータの $connsqlsrv_connect 関数の戻り値として取得できます。

sqlsrv_rows_affected(resource $stmt)
変更行(影響のあった行)の数を返します。
sqlsrv_send_stream_data(resource $stmt)
関数呼び出しの度に最大 8 KB のデータをサーバーに送ります。
sqlsrv_server_info(resource $conn)
サーバーに関する情報を返します。

パラメータの $connsqlsrv_connect 関数の戻り値として取得できます。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説