[英]Azure: How to correctly use a PHP webjob to make changes to SQL database?
目标 :使用PHP网络作业连接和更改Azure中的SQL数据库表。
我想上传一个.zip
包含文件.php
和.json
我已经在Azure上运行的应用程序服务的内部文件到webjobs设置。
我相信我在PHP文件中编码PDO-SQL连接的方式有问题,当我将Webjob作为.zip
上载到webjobs中时,状态始终为“待处理的重新启动”。
这是我的.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身份验证进行连接(不需要用户/密码)。 也许我也做错了。
有人有办法吗? 我真的很乐意就如何更改代码以使此webjob实际运行给出逐步或建议。
考虑一下这个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 Server进行身份验证” 。 由于您正在以沙箱提供的随机用户身份运行Webjob,因此Windows身份验证没有多大意义。
从Kudu的Process Explorer:
这是使用Azure SQL进行Windows身份验证的一种有效方案:
您有一个本地托管的应用程序,该应用程序使用Active Directory来对本地SQL Server进行身份验证。 您需要迁移到Azure SQL。 您没有选择更改SQL的身份验证方法的选项。 因此,您将目录直接同步到Azure AD,并使用Windows身份验证连接到Azure SQL。
有关Azure SQL中Windows身份验证的更多信息:
https://azure.microsoft.com/zh-CN/documentation/articles/sql-database-aad-authentication/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.