Я пытаюсь написать всеобъемлющий API с php для принятия мер.
Таким образом, даже если один из входных запросов не выполняется, он должен быть отменен, а другие представления не должны выполняться.
И это сделано хорошо.
Но проблема в том, что команда errorInfo ()
выдает ошибку только при запуске 1 запроса, например:
INSERT INTO Funds (City, BuyDate, PhoneNo) Values ('london', '2019/01/01', 0554);
Но если у вас несколько запросов, команда errorInfo ()
покажет значение [0000,null,null]
. например:
INSERT INTO Funds (City ,BuyDate, PhoneNo ) VALUES ('london', '2019/01/01',0554);
INSERT INTO HouseholdAdmin (HouseholdAdminId ,AdminCode , FundId ) VALUES (2,2,1);
Вторая очередь, HouseholdAdmin
, содержит ошибку, но команда errorInfo ()
работает, только если она запускается одна.
Мой API:
include "connect.php";
$inputdata = json_decode(file_get_contents('php://input'), true);
$query = "SELECT * FROM QueryBank WHERE QueryName=:name";
$result = $connect->prepare($query);
$result->bindParam("name", $inputdata["ViewName"]);
$result->execute();
if ($row = $result->FETCH(PDO::FETCH_ASSOC)) {
$query2 = $row["QueryString"];
$parameters = $inputdata["parameters"];
for ($x = 0; $x < count($parameters); $x++) {
$query2 = str_replace($inputdata["parameters"][$x]["key"], $inputdata["parameters"][$x]["value"], $query2);
}
$back = array();
$back["code"] = 0000;
$back["error"] = null;
try {
$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$connect->beginTransaction();
$result2 = $connect->prepare($query2);
$result2->execute();
$connect->commit();
echo json_encode($back);
} catch (Exception $e) {
$connect->rollback();
$back["code"] = $result2->errorInfo()[1];
$back["error"] = $result2->errorInfo()[2];
echo json_encode($back);
}
}
Следует отметить, что запросы хранятся в таблице и вызываются и выполняются с помощью оператора select.