$product_sql = "INSERT INTO orderproducts(orderid, productid) VALUES (?,?)";
$stock_sql = "UPDATE stock SET quantity=? WHERE productsid=?";
$success = false;
try {
    $db->connection->autocommit(false);
    //Insert a new order in the database
    $db->param_query($order_sql, "i", $data['total_price']);
    if ($db->statement->affected_rows == 0) {
        throw new Exception('order_sql not added');
    }
    $id = $db->connection->insert_id;
    $db->close_statement();
    //Inserts delivery information in the database
    //The data should already have been processed but just for safety in case I missed it, I will apply htmlspecialchars here as well.
    $array = array($id, htmlspecialchars($data['delivery']['first_name']), htmlspecialchars($data['delivery']['last_name']), htmlspecialchars($data['delivery']['email']), htmlspecialchars($data['delivery']['address']), htmlspecialchars($data['delivery']['zip_code']), htmlspecialchars($data['delivery']['area']));
    $db->param_query_array($deliver_sql, "issssss", $array);
    if ($db->statement->affected_rows == 0) {
        throw new Exception('deliver_sql not added');
    }
    $db->close_statement();
    //For each product, add it in the database table related to orders. Also alter the stock quantity.
    foreach ($data['products'] as $row) {
        for ($i = 0; $i < $row['buy_quantity']; $i++) {
            $array = array($id, $row['id']);
            $db->param_query_array($product_sql, "ii", $array);
            if ($db->statement->affected_rows == 0) {
                throw new Exception('product_sql not added');
            }
            $db->close_statement();
        }
        if ($row['buy_quantity'] > $row['quantity']) {