【发布时间】:2015-05-26 14:31:31
【问题描述】:
嗨_我正在尝试在我的 Facebook Canvas 游戏中发生特定事件时在我的数据库上运行 PDO 更新,但我的语法遇到了一些困难,希望有人能提供帮助。
我有一个名为Balance 的表。此表包含以下列:facebookID、goldbalance 和 invite。
此表存储每个玩家的金币余额,invite 列记录该玩家是否向其他玩家发送了成功(接受)的游戏邀请。
我目前正在做的是:当有新玩家加入游戏时,我会在 Facebook 的 Graph API 上运行检查以查看哪些(如果有)其他玩家邀请了这个新玩家,如果有,然后我抓住他们的ID然后做一个AJAX帖子将它们发送到一个PHP文件,我想奖励这些玩家的goldbalance +100金币,我还想将他们的invite列从0更改为1(这将导致显示一个弹出窗口,在他们下次登录游戏时通知他们奖励)。
现在我成功地将邀请发件人的 ID 作为数组发送到我的 PHP 文件中,但是我无法成功地对玩家的金币余额进行 PDO 更新。
这是我的 AJAX 代码,它以数组的形式发送 ID:
// requestid is the Array containing the sender IDs
$.ajax({
url: 'scripts/requestreward.php',
data: {'requestid' : requestid},
type: "POST",
success: function(response){
alert(response);
}
});
这是我当前的 PDO PHP 文件:
<?php
$servername = myservername;
$username = myusername;
$password = mypassword;
$dbname = mydbname;
//Create connection:
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("UPDATE `Balance`
SET `goldbalance` = `goldbalance` + 100,
`invite` = 1,
WHERE `facebookID` = :requestId,
foreach($_POST['requestid'] as $requestId){
`facebookID`="($requestId)"; }");
$stmt->bindParam(':requestid', $requestid);
$requestid = $_POST['requestid'];
$stmt->execute();
$conn->commit();
echo "Success";
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
我一直在尝试将其作为一个准备好的 PDO 语句来执行,因为我已经读过它更安全,但我很确定我为数组中的每个项目执行了不正确的更新循环。
另外,我不确定这条线是否是将玩家的金币余额(即 INT)增加 100 的正确方法:SET `goldbalance` = `goldbalance` + 100,
非常感谢您提供任何帮助,在此先感谢您!
【问题讨论】:
-
该代码完全是错误的。您的 SQL 未以悬空的
,和缺少的");终止,并且仍然容易受到sql injection attacks 的攻击。
标签: php arrays ajax pdo prepared-statement