Azure:PHP SQL Webjob不工作。为什么会在查询时抛出它;执行();陈述
为了在Azure上运行PHP webjob以将记录插入SQL数据库,我的代码在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
$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 );