PHP
SQLSRVの使用
サーチ…
備考
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_ASSOC
、 SQLSRV_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 />";
}
}
}