我遇到的问题是"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>
这就是它的样子:
正如您所看到的,&#34;类别中没有信息显示&#34;选项。
如果我将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>
现在看起来像这样:
你有什么建议吗?
答案 0 :(得分:2)
你需要更清洁 -
<?php
$result = $sel->fetchAll(PDO::FETCH_OBJ); //return an object
foreach($result as $actor) {
echo '<option value=' . $actors->actor_id .'>'. $actor->actors .'</option>'; // note the quotes
}
?>
您可以根据需要循环遍历结果,而无需重新获取数据。
答案 1 :(得分:1)
您的第一个while
循环从PDOStatement对象中获取所有行,因此当您第二次调用while ($sel->fetch())
时,它会立即返回false
。如果要在基本上两个单独的循环中使用结果,先将所有行提取到一个行数组中,然后遍历该数组。使用fetchAll()
执行此操作,而不是通过bindColumn()
绑定到变量。
事实上,我几乎总是建议首先获取而不是在显示逻辑期间,除了非常大的行集,其中通过一次获取所有内存消耗的内存将对您的系统造成负担。 / p>
// 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属性被正确引用。