sql >> データベース >  >> RDS >> Mysql

親IDの配列メソッドを使用してテーブルに挿入します

    これでうまくいくはずです。さらに他に問題がある場合はお知らせください。

    <?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();
    ?>
    

    ちなみに、開発を続ける前に、パラメーター化されたステートメントについて詳しく読んでください。また、私があなたに与えているコードを理解し、コメントを読んでみてください。前回、私はほとんどすべてを変更しましたが、この質問では、あなたがそれをすべて無視していることがわかります。さらに、コードのロジックを理解していないようですので、考えてみてください。すべてのアルゴリズムを紙に書き留めてから、アルゴリズムをテストしてから、そのアルゴリズムに基づいてアプリケーションを構築してみてください。




    1. パラメータに複数の値がある場合にWHEREステートメントでCASEを使用する

    2. PostgreSQLデータベースを使用してWebアプリで完全なオフライン機能を使用するにはどうすればよいですか?

    3. Cloud SQL Postgres jdbc:postgres://google/に適したドライバーが見つかりません

    4. 条件が満たされない場合のドロップテーブルの防止