如何在 php 中使用内部联接

How to use inner join in php

我想要一个选项值中 table 的所有 'acteurs',但我不知道该怎么做。我有两个 table,'auteurs' 和 'posts'。在帖子 table 中,我有一个名为 'auteur_id' 的列,它有一个指向 table 作者的外键。

当我 运行 我的 php 中的这个 sql 代码时,它也在我的 phpmyadmin 中提供了良好的输出。

我的代码:

<html>

    <head>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>

    <body>
        <div class="container">

            <div id="header">
                <h1>Nieuwe post</h1>
                <a href="index.php"><button>Alle posts</button></a>
            </div>

        <?php
            $host = 'localhost';
            $username = 'root';
            $password = '';
            $dbname = 'foodblog';
            $dsn = 'mysql:host=' . $host . ';dbname=' . $dbname;
            
            try {
                $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
                // set the PDO error mode to exception
                $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch (PDOException $e) {
                echo "Connection failed: " . $e->getMessage();
            }
            
        try {
            if (isset($_POST["submit"])) {
                $titel = $_POST['titel'];
                $img = $_POST['img_url'];
                $inhoud = $_POST['inhoud'];
                $sql = "INSERT INTO posts (titel, img_url, inhoud) 
                VALUES ('$titel', '$img', '$inhoud')";
                $conn->exec($sql);
            } else {
        ?>
                <form action="new_post.php" method="post">
                Titel:<br/> <input type="text" name="titel"><br/><br/>
                Auteurs:<br><select name='auteurs'>
                <option value='<?php
                $sql2 = "SELECT * 
                FROM posts
                INNER JOIN auteurs
                ON posts.auteur_id = auteurs.id";
                $conn->exec($sql2);
                foreach ($sql2 as $rows) {
                    $rows['auteur'];
                }
                ?>'>
                </select>
                <br><br>
                URL afbeelding:<br/> <input type="text" name="img_url"><br/><br/>
                Inhoud:<br/> <textarea name="inhoud" rows="10" cols="100"></textarea>
                <br/><br/>
                <input type="submit" name="submit" value="Publiceer">
                </form>
        <?php
            }
        } catch(error) {
            console.error(error);
        }
        ?>

    </body>
</html>

这是我现在拥有的: 但我需要 table 作者的所有 'auteur' 值显示在 php 的作者选项中。 这是我 phpmyadmin 中的所有内容 导演 table:

帖子table:

每次迭代 SELECT 查询时都必须创建一个新选项。

<form action="new_post.php" method="post">
    Titel:<br/> <input type="text" name="titel"><br/><br/>
    Auteurs:<br>
    <select name='auteurs'>
        <?php
        $sql2 = "SELECT * FROM posts INNER JOIN auteurs ON posts.auteur_id = auteurs.id";
        $res = $conn->query($sql2);
        foreach ($res as $row) {
            echo "<option value='".$row['auteur']."'>".$row['auteur']."</option>";
        }
        ?>
    </select>
    <br><br>
    URL afbeelding:<br/> <input type="text" name="img_url"><br/><br/>
    Inhoud:<br/> <textarea name="inhoud" rows="10" cols="100"></textarea>
    <br/><br/>
    <input type="submit" name="submit" value="Publiceer">
</form>

您还应该使用 query method or the safer prepare / execute 方法来执行查询。

    Use like below for select box:
       <select name='auteurs'>
              <?php
                $sql2 = "SELECT * FROM auteurs ";
                $sql2=$conn->query($sql2);
                foreach ($sql2 as $rows) { ?>
                   <option value='<?php echo $rows['id'];?>'><?php echo $rows['auteur'];?></option>
                    
                <?php } ?> 
  </select>