Azure. Как правильно использовать веб-работу на PHP для внесения изменений в базу данных SQL?

ЦЕЛЬ. Использование веб-задания PHP для подключения и изменения таблицы базы данных SQL в Azure.

Я пытаюсь загрузить .zip файл, содержащий .php и .json файл настроек веб-заданий внутри службы приложений, работающей на Azure.

Я считаю, что что-то не так с тем, как я кодирую соединение PDO-SQL внутри файла PHP, когда я загружаю веб-работу как .zip в веб-задания, статус всегда "Ожидание перезапуска".

Вот что у меня есть в моем .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 файл, который я загружаю.

Чтобы объяснить код PHP, я пытаюсь подключиться через проверку подлинности Windows (нет необходимости для пользователя / прохода). Может быть, я тоже делаю это неправильно.

У кого-нибудь есть способы сделать это? Я был бы очень признателен, если бы давал пошаговые инструкции или предложения о том, как изменить мой код, чтобы этот веб-задание действительно запустилось.

1 ответ

Решение

Рассмотрим этот 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". Поскольку вы запускаете Webjob как случайный пользователь, предоставляемый песочницей, проверка подлинности Windows не имеет особого смысла.

Из Обозревателя процессов Куду:

Process Explorer

Вот один допустимый сценарий для проверки подлинности Windows с помощью Azure SQL:

У вас есть предварительно размещенное приложение, которое использует Active Directory для аутентификации на вашем предварительном SQL Server. У вас есть требование перейти на Azure SQL. У вас нет возможности изменить метод аутентификации для SQL. Таким образом, вы синхронизируете свой каталог с Azure AD и используете проверку подлинности Windows для подключения к Azure SQL.

Подробнее об аутентификации Windows в Azure SQL:
https://azure.microsoft.com/en-us/documentation/articles/sql-database-aad-authentication/

Другие вопросы по тегам