我有一个脚本,我用它来获得报酬。我想在事务状态返回"success"时运行SQL查询。
我该怎么做?
用下面的代码检查交易状态:
checktransaction.php
<?php
require_once("class.php");
header('Content-Type: text/html; charset=utf-8');
$idealSEPA = new Ideal_SEPA();
$transactionID = $_GET["trxid"];
$requestTransactionStatus = $idealSEPA->requestTransactionStatus($transactionID);
echo '<pre>';
var_dump($requestTransactionStatus);
echo '</pre>';
?>
var_dump返回以下内容:
array(10) {
["result"]=>
string(7) "Success"
}
我正在使用以下方法:
public function requestTransactionStatus($transactionID){
if($transactionID == ""){
return false;
}
try {
$response = $this->iDEALConnector->getTransactionStatus($transactionID);
$this->status = $response->getStatus();
return array('status' => true, 'result' => $this->status);
} catch (SerializationException $ex){
return array('status' => false, 'error_msg' => $ex->getMessage());
}
}
我想知道如何检查transactionstatus是否为"success",并构建一个SQL查询,如果transactionstatus为"success",则将数据插入数据库
更新1:下面不能工作返回数组('status' => true,session_start ();
$link = mysqli_connect("localhost", "root", "", "db");
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
$sql = "UPDATE payment SET pay='2' WHERE id='1'";
if(mysqli_query($link, $sql)){
echo " ";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
// Close connection
mysqli_close($link);
'result' => $this->status
);
我认为您应该在响应后插入状态,并检查响应是否成功。
<?php
require_once("class.php");
header('Content-Type: text/html; charset=utf-8');
$idealSEPA = new Ideal_SEPA();
$transactionID = $_GET["trxid"];
$requestTransactionStatus = $idealSEPA->requestTransactionStatus($transactionID);
if(!empty($requestTransactionStatus['result'])){
if($requestTransactionStatus['result'] == "Success"){
// Connect to the database
$link = mysqli_connect("localhost", "root", "", "db") or die("ERROR: Could not connect. " . mysqli_connect_error());
$sql = "UPDATE payment SET pay='2' WHERE id='1'";
if(mysqli_query($link, $sql)){
echo " Payment status successfully updated. ";
} else {
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
// Close connection
mysqli_close($link);
}
}
?>
可以在class.php中返回成功之前立即运行SQL查询。事实上,在返回成功之前,您可以检查以确保没有SQL错误(在运行查询之后)。
编辑:根据你的新信息,看起来你想这样做:public function requestTransactionStatus($transactionID){
if($transactionID == ""){
return false;
}
try {
$response = $this->iDEALConnector->getTransactionStatus($transactionID);
$this->status = $response->getStatus();
return array('status' => true,
session_start();
$link = mysqli_connect("localhost", "root", "", "db");
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
$sql = "UPDATE payment SET pay='2' WHERE id='1'";
if(mysqli_query($link, $sql)){
echo " ";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
'result' => $this->status);
} catch (SerializationException $ex){
return array('status' => false, 'error_msg' => $ex->getMessage());
}
}
如果你想在数组构造函数中像这样执行数据库代码,那是行不通的。您需要做的是首先执行数据库代码,然后根据数据库查询的结果有条件地返回。下面的代码还没有经过测试,但是它可以更好地表示你的代码在结构上应该是什么样子:
public function requestTransactionStatus($transactionID){
if($transactionID == ""){
return false;
}
try {
$response = $this->iDEALConnector->getTransactionStatus($transactionID);
$this->status = $response->getStatus();
session_start();
$link = mysqli_connect("localhost", "root", "", "db");
if($link === false) {
// Instead of dying here, you could even return an error like you do for serialization errors
return array('status' => false, 'error_msg' => "ERROR: Could not connect. " . mysqli_connect_error());
}
$sql = "UPDATE payment SET pay='2' WHERE id='1'";
if(mysqli_query($link, $sql)){
return array('status' => true, 'result' => $this->status);
} else{
// See my comment above
return array('status' => true, 'result' => "ERROR: Could not able to execute $sql. " . mysqli_error($link));
}
} catch (SerializationException $ex){
return array('status' => false, 'error_msg' => $ex->getMessage());
}
}