我的问题是"category"选项没有结果。我试着用了两个whiles,但也没用。
这是我的php:

try{
             $sel=$pdo->prepare("Select * from
                         actors inner join cat
                         on actors.id=cat.id");

    $sel->bindColumn(1,$actors_id);
    $sel->bindColumn(2,$actors);
    $sel->bindColumn(3,$cat_id);
    $sel->bindColumn(4,$cat);
    $sel->execute();




}catch(PDOException $e){

     die("error: " . $e->getMessage());

 }

这是我的html:
<form action="" method="post">

    <label for="author">Author</label>
       <Select id="author">

      //Show data from php file:

    <?php while($sel->fetch()):?>
        <?php echo "<option value='$actors_id'>$actors</option>";?>
    <?php endwhile; ?>
       </Select>

       <label for="category">Category</label>

       <Select id="category">

      //Show data again from php file:

    <?php while($sel->fetch()):?>
        <?php echo "<option value='$cat_id'>$cat</option>";?>
    <?php endwhile; ?>
       </Select>
    </form>

这就是它的样子:
如您所见,“类别”选项中没有信息显示。
如果我将html改成这样,它也不起作用:
<Select id="author">

    <?php while($sel->fetch()):?>
        <?php echo "<option value='$actors_id'>$actors</option>";?>
       </Select>

       <label for="category">Category</label>
       <Select id="category">

        <?php echo "<option value='$cat_id'>$cat</option>";?>
    <?php endwhile; ?>
       </Select>

现在看起来是这样的:
你有什么建议吗?

最佳答案

第一个while循环从PDOStatement对象获取所有行,因此当您第二次调用while ($sel->fetch())时,它会立即返回false。如果要在两个独立的循环中使用结果,请先将所有行提取到一个行数组中,然后在该数组上循环。使用fetchAll()而不是通过bindColumn()绑定到变量。
事实上,我几乎总是建议先取,而不是在显示逻辑中,除非是非常大的行集,通过一次调用而消耗的内存将对您的系统征税。

// Get all the rows as an array
$rows = $sel->fetchAll(PDO::FETCH_ASOC);

// Later loop for the items you need as many times as you need
// Each new foreach will iterate the entire $rows array from start to end
<?php foreach ($rows as $row): ?>
<?php echo "<option value='{$row['actors_id']}'>" . htmlspecialchars($row['actors']) . "</option>";?>
<?php endforeach; ?>

<?php foreach ($rows as $row): ?>
<?php echo "<option value='{$row['cat_id']}'>" . htmlspecialchars($row['cat']) . "</option>";?>
<?php endforeach; ?>

不要忘记对输出调用htmlspecialchars(),以确保它被正确地编码为HTML。我还没有在cat_id,actors_id上这么做,假设这些是已知的整数,但如果不是,那么应该使用htmlspecialchars($row['cat_id'], ENT_QUOTES)来确保正确引用HTML属性。

08-17 05:54