サーチ…


備考

SQLSRVドライバは、Microsoft SQL ServerおよびSQL Azureデータベースにアクセスできる、MicrosoftがサポートするPHP拡張モジュールです。これはPHP 5.3以降で廃止され、PHP 7から削除されたMSSQLドライバの代替手段です。


SQLSRV拡張機能は、次のオペレーティングシステムで使用できます。

  • Windows Vista Service Pack 2以降
  • Windows Server 2008 Service Pack 2以降
  • Windows Server 2008 R2
  • Windows 7

SQLSRV拡張機能では、PHPを実行しているのと同じコンピュータにMicrosoft SQL Server 2012ネイティブクライアントをインストールする必要があります。 Microsoft SQL Server 2012ネイティブクライアントがまだインストールされていない場合は、 「要件」ドキュメントページの該当するリンクをクリックします


最新のSQLSRVドライバをダウンロードするには、次の場所に移動します。 ダウンロード

SQLSRVドライバのシステム要件の完全なリストは、ここにあります。 システム要件

SQLSRV 3.1以上を使用している場合は、SQL Server用のMicrosoft ODBCドライバ11をダウンロードする必要があります

PHP7ユーザーはGitHubから最新のドライバをダウンロードできます

SQL Server用のMicrosoft®ODBCドライバ13は 、Microsoft SQL Server 2008、SQL Server 2008 R2、SQL Server 2012、SQL Server 2014、SQL Server 2016(プレビュー)、Analyticsプラットフォームシステム、Azure SQLデータベースおよびAzure SQLデータウェアハウスをサポートします。

接続の作成

$dbServer = "localhost,1234"; //Name of the server/instance, including optional port number (default is 1433)
$dbName = "db001"; //Name of the database
$dbUser = "user"; //Name of the user
$dbPassword = "password"; //DB Password of that user

$connectionInfo = array(
    "Database" => $dbName, 
    "UID" => $dbUser,
    "PWD" => $dbPassword
);

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

SQLSRVにはPDOドライバもあります。 PDOを使用して接続するには:

$conn = new PDO("sqlsrv:Server=localhost,1234;Database=db001", $dbUser, $dbPassword);

簡単なクエリを作成する

//Create Connection
$conn = sqlsrv_connect($dbServer, $connectionInfo);

$query = "SELECT * FROM [table]"; 
$stmt = sqlsrv_query($conn, $query);

注:大括弧 [] 使用 すると、 予約語である ため、単語 table からエスケープする ことができます 。バッククォートと同じように、これらの作業 ` MySQLの中で行います

ストアドプロシージャの呼び出し

サーバー上のストアドプロシージャを呼び出すには:

$query = "{call [dbo].[myStoredProcedure](?,?,?)}"; //Parameters '?' includes OUT parameters

$params = array(
    array($name, SQLSRV_PARAM_IN),
    array($age, SQLSRV_PARAM_IN),
    array($count, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT) //$count must already be initialised
);

$result = sqlsrv_query($conn, $query, $params);

パラメータ化されたクエリの作成

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

$query = "SELECT * FROM [users] WHERE [name] = ? AND [password] = ?";
$params = array("joebloggs", "pa55w0rd");

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

異なるパラメータを使用して同じクエリ文を複数回使用する予定の場合は、 sqlsrv_prepare()およびsqlsrv_execute()関数を使用しても同じことができます。

$cart = array(
    "apple" => 3,
    "banana" => 1,
    "chocolate" => 2
);

$query = "INSERT INTO [order_items]([item], [quantity]) VALUES(?,?)";
$params = array(&$item, &$qty); //Variables as parameters must be passed by reference

$stmt = sqlsrv_prepare($conn, $query, $params);

foreach($cart as $item => $qty){
    if(sqlsrv_execute($stmt) === FALSE) {
        die(print_r(sqlsrv_errors(), true));
    }
}

クエリ結果の取得

クエリから結果をフェッチするには、主に3つの方法があります。

sqlsrv_fetch_array()

sqlsrv_fetch_array()は配列として次の行を取得します。

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

while($row = sqlsrv_fetch_array($stmt)) {
    echo $row[0];
    $var = $row["name"];
    //...
}

sqlsrv_fetch_array()は、異なるタイプの配列をフェッチするためのオプションの第2パラメータがありますSQLSRV_FETCH_ASSOCSQLSRV_FETCH_NUMERICおよびSQLSRV_FETCH_BOTH (デフォルト)を使用できます。それぞれ連想配列、数値配列、連想配列、数値配列を返します。


sqlsrv_fetch_object()

sqlsrv_fetch_object()はオブジェクトとして次の行を取得します。

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

while($obj = sqlsrv_fetch_object($stmt)) {
    echo $obj->field; // Object property names are the names of the fields from the query
    //...
}

sqlsrv_fetch()

sqlsrv_fetch()は、次の行を読み込み可能にします。

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

while(sqlsrv_fetch($stmt) === true) {
    $foo = sqlsrv_get_field($stmt, 0); //gets the first field -
}

エラーメッセージの取得

問合せがうまくいかないときは、ドライバから返されたエラー・メッセージをフェッチして問題の原因を特定することが重要です。構文は次のとおりです。

sqlsrv_errors([int $errorsOrWarnings]);

これは以下の配列を返します。

キー説明
SQLSTATE SQL Server / OBDCドライバが入っている状態
コード SQL Serverエラーコード
メッセージエラーの説明

上記の関数を以下のように使用するのが一般的です。

$brokenQuery = "SELECT BadColumnName FROM Table_1";
$stmt = sqlsrv_query($conn, $brokenQuery);

if ($stmt === false) {
    if (($errors = sqlsrv_errors()) != null) {
        foreach ($errors as $error) {
            echo "SQLSTATE: ".$error['SQLSTATE']."<br />";
            echo "code: ".$error['code']."<br />";
            echo "message: ".$error['message']."<br />";
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow