sql >> Databáze >  >> RDS >> Mysql

Vložit do tabulky pomocí metody pole s rodičovským ID

Tohle by mělo fungovat dobře. Dejte mi vědět, pokud je zde nějaký další problém.

<?php
try {
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "2d_system";
    $conn = new mysqli($servername, $username, $password, $dbname);
    if($stmt = $conn->prepare($conn, "SELECT `Availability` FROM `number_availability` WHERE `Number`=? AND `GameCenter`=?")){
        foreach($_POST['gamecenter'] as $key => $value){
            $gamecenter = $_POST['gamecenter'][$key];
            $number = $_POST['number'][$key];
            $stmt->bind_param('ii', $number, $gamecenter); // if any of these values is a String, use 's' for that value instead (ii means integer-integer)
            $stmt->execute();
            if($conn->errno){
                throw new Exception("Error: could not check for availability: " . $conn->error);
            }
            $result = $stmt->get_result();
            $data = $result->fetch_array();
            if($data['Availability'] <= 0){
                unset($_POST['gamecenter'][$key]);
                unset($_POST['number'][$key]);
                unset($_POST['price'][$key]);
            }
        }
    }
    if($conn->errno){
        throw new Exception("Error: could not check for availability: " . $conn->error);
    }
    if(count($_POST['gamecenter']) > 0){
        if($conn->query("INSERT INTO `lottery_ticket` (`CreatedDateTime`) VALUES (now())")){
            $lotteryTicketID = $conn->insert_id;
            foreach($_POST['gamecenter'] as $key => $value){
                $gamecenter = $_POST['gamecenter'][$key];
                $number = $_POST['number'][$key];
                $price = $_POST['price'][$key];
                if($stmt = $conn->prepare("INSERT INTO `" . strtolower($gamecenter) . "_draw` (`LotteryId`, `" . $gamecenter . "_Number`, `Price`) VALUES (?, ?, ?)")){
                    $stmt->bind_param('idd', $lotteryTicketID, $number, $price);
                    $stmt->execute();
                }
                if($conn->errno){
                    throw new Exception("Error: could not execute query/queries: " . $conn->error);
                }
            }
        }
        if($conn->errno){
            throw new Exception("Error: could not execute query/queries: " . $conn->error);
        }
        echo "Records added successfully.";
    } else {
        throw new Exception("Error: no available numbers.");
    }
} catch(Exception $e){
    echo $e->getMessage();
}
$conn->close();
?>

Mimochodem, než budete pokračovat ve vývoji, přečtěte si více o parametrizovaných příkazech. Zkuste také porozumět kódu, který vám dávám, a přečtěte si komentáře. Minule jsem změnil skoro všechno a v této otázce vidím, že jsi to všechno ignoroval. Navíc se zdá, že nerozumíte logice svého kódu, takže se nad tím trochu zamyslete. Zkuste si každý algoritmus zapsat na papír, poté algoritmus otestovat a poté na základě tohoto algoritmu sestavovat své aplikace.




  1. Zrychlete test rozsahu pro klíčové hodnoty vnořené v poli objektů jsonb

  2. 4 způsoby, jak vypsat všechny tabulky v databázi MariaDB

  3. Oracle.DataAccess.Client.OracleException ORA-03135:kontakt ztraceného připojení

  4. SQLite to Postgres (Heroku) GROUP BY