ЦЕЛЬ: Использование веб-задания 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 (нет необходимости для пользователя / прохода). Может быть, я тоже делаю это неправильно.
У кого-нибудь есть способы сделать это? Я был бы очень признателен, если бы давал пошаговые инструкции или предложения о том, как изменить мой код, чтобы этот веб-джоб фактически работал.
Учти это 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);
?>
Ожидаемый результат:
(Вы можете проверить в Куду: https: // {имя_сайта} .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 не имеет особого смысла.
Из Обозревателя процессов Куду:
Вот один допустимый сценарий для проверки подлинности Windows с Azure SQL:
У вас есть предварительно размещенное приложение, которое использует Active Directory для аутентификации на вашем предварительном SQL Server. У вас есть требование перейти на Azure SQL. У вас нет возможности изменить метод аутентификации для SQL. Так что вы DirSync своего каталога в Azure AD и используйте проверку подлинности Windows для подключения к Azure SQL.
Подробнее об аутентификации Windows в Azure SQL:
https://azure.microsoft.com/en-us/documentation/articles/sql-database-aad-authentication/
Других решений пока нет …