更新数据库PHP时出错

时间:2011-09-29 06:54:49

标签: php mysql session payment-gateway

在我们的支付网关提交付款表格(信用卡等)后,我们会在付款获批后收到“response_code”1。然后,我们使用以下代码更新数据库中的用户信息以反映已批准的事务。

但是,大约每10次中有10次,即使交易返回了已批准的回复,用户的信息也不会更新。这段代码有什么问题吗?或者,由于某种原因,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']);
}
?>

2 个答案:

答案 0 :(得分:2)

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

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

编辑:还存储错误,并尝试存储您需要的变量。这使得查明问题变得容易得多。例如,使用日志文件。

答案 1 :(得分:0)

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

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