更新数据库PHP出错



向我们的支付网关提交支付表单(信用卡等)后,当支付被批准时,我们收到"response_code" 1。然后,我们使用以下代码更新数据库中的用户信息,以反映已批准的事务。

然而,大约每10次中就有1次,即使事务返回了批准的响应,用户的信息也不会更新。这段代码有什么明显的错误吗?或者由于某种原因,response_code不等于1 ?

<?php
session_start();
if ($_GET['response_code'] == 1)
{ 
require('scripts/global.php'); //connect to database
$email = $_SESSION['email'];
$level = 3;
$transaction_id = "" . htmlentities($_GET['transaction_id']);
mysql_query ("UPDATE `users` SET level = '$level', trans_id = '$transaction_id' WHERE `email` = '$email'"); //update user info
$error = "false";
}
else
{
$noerror = "true";
$message = "Sorry, an error occurred: " . htmlentities($_GET['response_reason_text']);
}
?>

可能是因为出现了会话超时?WHERE使用电子邮件地址,如果这是无效的(不在那里),那么您可能不会得到更新。

也许你应该检查交易ID(或类似的)。我猜你们在交易开始前就有这样的东西了吧?

edit:如果发生错误,也要存储,并尝试存储您需要的变量。这使得找出问题变得容易得多。例如,使用日志文件。

除了明显的安全漏洞之外,您没有检查查询的结果。尝试使用mysql_error()mysql_affected_rows()来查看是否更新了任何内容。当其中任何一个指示异常情况时,您还希望看到所运行查询的确切文本。检查事项:

  • $email是否为空?
  • $transaction_id$email有撇号吗?
  • 数据库中是否有重复的电子邮件地址?
  • 用户是否已经被设置为级别3?
  • 您是否失去与数据库的连接?
  • 你的脚本被调用了吗?