Azure:PHP SQL Webjob不工作。为什么会在查询时抛出它;执行();陈述

Azure:PHP SQL Webjob不工作。为什么会在查询时抛出它;执行();陈述,php,sql-server,pdo,prepared-statement,webjob,Php,Sql Server,Pdo,Prepared Statement,Webjob,为了在Azure上运行PHP webjob以将记录插入SQL数据库,我的代码在$query->execute()上不断中断行 这就是我所做的。首先,我进入我的SQL数据库,在masterdb: CREATE LOGIN username WITH password='userpassword' 然后,我在当前数据库中以用户身份添加了此登录名(不是在master下,而是在mydb下): 然后,我使用以下命令授予该用户写权限: EXEC sp_addrolemember N'db_datawrit

为了在Azure上运行PHP webjob以将记录插入SQL数据库,我的代码在
$query->execute()上不断中断

这就是我所做的。首先,我进入我的SQL数据库,在
master
db:

CREATE LOGIN username WITH password='userpassword'
然后,我在当前数据库中以用户身份添加了此登录名(不是在
master
下,而是在
mydb
下):

然后,我使用以下命令授予该用户写权限:

EXEC sp_addrolemember N'db_datawriter', N'username'
完成所有这些之后,我进入portal.azure,打开我的应用程序服务,导航到WebJobs并上传了一个
.zip
文件,其中包含两个文件

调度程序,
设置。作业

{
    "schedule": "0 */5 * * * *"
}
还有我的主要PHP代码,
updateRecord.PHP

<?php

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

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

$cm = 'cm';
$span = '1day';

$stf = $conn->prepare("INSERT INTO mydbtable
VALUES ( $cm, $span, 1, 2, 3, 4, 12.34 );");
$stf->execute();

echo $stf;

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

?>
整个WebJob日志中最相关、最受关注的是:

[09/10/2016 21:03:15>82e662:INFO]致命错误:未捕获异常 带有消息“SQLSTATE[42000]:[Microsoft][SQL Server”的“PDOException” 本机客户端11.0][SQL Server]中“day.”附近的语法不正确 D:\local\Temp\jobs\continuous\myjobname\uf5ls33g.42d\myjobzipfolder\updateRecord.php:20


有人能诊断出如何解决这个问题吗?我没有发现我如何准备或执行sql语句有任何问题。

您错误地使用了准备好的语句,这会导致sql无效

$stf = $conn->prepare("INSERT INTO mydbtable
VALUES (?, ?, 1, 2, 3, 4, 12.34 );");
$stf->execute(array($cm, $span));
您可以引用
$cm
$span
,这也可以。上述用法是准备好的语句的使用方式。驱动程序处理报价

当您的查询到达DB时,它是:

INSERT INTO mydbtable
VALUES (1day, cm, 1, 2, 3, 4, 12.34 );
因此需要引用
1day
cm
。使用占位符和绑定允许驱动程序为您执行此操作,而不需要转义这些变量中的值

$stf = $conn->prepare("INSERT INTO mydbtable
VALUES (?, ?, 1, 2, 3, 4, 12.34 );");
$stf->execute(array($cm, $span));
INSERT INTO mydbtable
VALUES (1day, cm, 1, 2, 3, 4, 12.34 );