0

目標: PHP Web ジョブを使用して、Azure の SQL データベース テーブルに接続し、変更すること。

および.zipファイルを含むファイルを、Azure で実行しているアプリ サービス内の webjobs 設定にアップロードしようとしています。.php.json

PHP ファイル内で PDO-SQL 接続をコーディングする方法に問題があると思います。Web ジョブを Web ジョブにアップロードする.zipと、ステータスは常に「Pending Restart」になります。

.phpファイルにあるものは次のとおりです。

<?php

$conn = new PDO ( "sqlsrv:server = mydb.database.windows.net,1433; Database = myappservices");
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
catch ( PDOException $e ) {
  print( "Error connecting to SQL Server." );
}
$connectionInfo = array("Database" => "myappservices");
$serverName = "mydb.database.windows.net,1433";
$conn = sqlsrv_connect($serverName, $connectionInfo);

if ($conn) {
  $stf = $conn->prepare("INSERT INTO MyTable
                        VALUES ('boom', 1, 2);");
  $stf->execute();
}

?>

次に、私の.jsonファイルは単なるスケジューラです。

{
    "schedule": "0 */5 * * * *"
}

これらは、.zip私がアップロードしているファイル内の 2 つのファイルのみです。

PHPコードを説明するために、Windows認証を介して接続しようとしています(ユーザー/パスは必要ありません)。多分私もこれを間違っています。

これを行う方法はありますか?この Web ジョブを実際に実行するためにコードを変更する方法について、ステップバイステップまたは提案をいただければ幸いです。

4

1 に答える 1

2

このjob.phpを考えてみましょう:

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

try {
    // DON'T HARDCODE CREDENTIALS, pull from Application Settings.
    // In Azure App Service, Application Settings are exposed as
    // environment variables.
    //
    // i.e. $db_user = getenv("DB_USER");
    //
    $conn = new PDO ("sqlsrv:server = poqfsXXXX.database.windows.net,1433;
                     Database = MobileApp_db",
                     "Username", "P@ssw0rd");
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
    print("Error connecting to SQL Server: " + $e);
}

$stmt = $conn->prepare("select * from todoitems");
$stmt->execute();
while ($row = $stmt->fetch()) {
    print_r($row);
}

unset($conn);
unset($stmt);

?>    

予想される出力:
(Kudu でテストできます: https://{sitename}.scm.azurewebsites.net/DebugConsole )

d:\home\site\tests> "d:\program files (x86)\php\v5.6\php.exe" job.php

Array
(
    [Id] => d4657cff-09a2-4a8a-b1d2-462c2c42a9f0
    [0] => d4657cff-09a2-4a8a-b1d2-462c2c42a9f0
    [Text] => From Azure SQL
    [1] => From Azure SQL
    [Complete] => 0
    [2] => 0
    [Version] => 0000000000001825
    [3] => 0000000000001825
    [CreatedAt] => 2016-06-17 10:11:17.1167267 +00:00
    [4] => 2016-06-17 10:11:17.1167267 +00:00
    [UpdatedAt] => 2016-06-17 10:11:17.1167267 +00:00
    [5] => 2016-06-17 10:11:17.1167267 +00:00
    [Deleted] => 0
    [6] => 0
)
Array
(
    ...
)
...

PHPコードを説明するために、Windows認証を介して接続しようとしています(ユーザー/パスは必要ありません)。多分私もこれを間違っています。

Azure SQL は Windows 認証をサポートしていますが、「ユーザー/パスは必要ありません」とはどういう意味か正確にはわかりません。Windows 認証とは、「このプロセスが実行されている人の資格情報を取得し、SQL サーバーに対して認証を試みる」ことを意味します。サンドボックスによって提供されるランダム ユーザーとして Web ジョブを実行しているため、Windows 認証はあまり意味がありません。

Kudu の Process Explorer から:

プロセス エクスプローラー

Azure SQL を使用した Windows 認証の有効なシナリオの 1 つを次に示します。

Active Directory を使用してオンプレミス SQL Server への認証を行う、オンプレミスでホストされたアプリケーションがあります。Azure SQL に移行する必要があります。SQL の認証方法を変更するオプションはありません。そのため、ディレクトリを Azure AD に同期し、Windows 認証を使用して Azure SQL に接続します

Azure SQL での Windows 認証の詳細:
https://azure.microsoft.com/en-us/documentation/articles/sql-database-aad-authentication/

于 2016-09-10T16:44:51.073 に答える