我应该从数据库中获取数据来创建下拉列表吗?
Should I get data from my database to create a dropdown list?
我有一个带有下拉选项的表单,其选项是根据数据库中的 table 确定的。我会定期(手动)向下拉列表和数据库添加更多选项。要么我可以使下拉选择从数据库中获取选项,如下所示:
<select class="form-control" name="category" id="category">
<?php
$sql = "SELECT id, category FROM categories;";
$result = $GLOBALS['conn']->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$category = $row['category'];
$id = $row['id'];
echo "<option value='$id'>$category</option>";
}
}
?>
</select>
这会减少我的工作量,因为我现在只需更新数据库,表单会自行更新。
或者我可以手动将选项输入到这样的表格中:
<select class="form-control" name="category" id="category">
<option value='1'>option1</option>
<option value='2'>option2</option>
<option value='3'>option3</option>
</select>
这种方式需要更多的手动工作,但优点是不必每次都连接到数据库(减少服务器的工作量)。
我的问题是我应该使用哪种方法?给我更多工作的方法还是让服务器更多工作的方法?
对于 select 使用数据库存在赞成和反对的争论。至于 pro 参数,更新相对容易 - 您只需插入一个新值,它就会出现在您的表单中。这种方法的问题是您的应用程序将在您每次呈现表单时执行查询。在拥有数百万次点击的网站中,这不是一个好主意。因此,使用的替代方法是将查询结果缓存在某个中间层中,尤其是当这些值变化不大时。根据我的经验,处理这些值的最佳方法是从配置文件中加载它们。这些是很少更改的值,可以在其中添加新值。这些仍然可以缓存并且不需要数据库命中。
我有一个带有下拉选项的表单,其选项是根据数据库中的 table 确定的。我会定期(手动)向下拉列表和数据库添加更多选项。要么我可以使下拉选择从数据库中获取选项,如下所示:
<select class="form-control" name="category" id="category">
<?php
$sql = "SELECT id, category FROM categories;";
$result = $GLOBALS['conn']->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$category = $row['category'];
$id = $row['id'];
echo "<option value='$id'>$category</option>";
}
}
?>
</select>
这会减少我的工作量,因为我现在只需更新数据库,表单会自行更新。
或者我可以手动将选项输入到这样的表格中:
<select class="form-control" name="category" id="category">
<option value='1'>option1</option>
<option value='2'>option2</option>
<option value='3'>option3</option>
</select>
这种方式需要更多的手动工作,但优点是不必每次都连接到数据库(减少服务器的工作量)。
我的问题是我应该使用哪种方法?给我更多工作的方法还是让服务器更多工作的方法?
对于 select 使用数据库存在赞成和反对的争论。至于 pro 参数,更新相对容易 - 您只需插入一个新值,它就会出现在您的表单中。这种方法的问题是您的应用程序将在您每次呈现表单时执行查询。在拥有数百万次点击的网站中,这不是一个好主意。因此,使用的替代方法是将查询结果缓存在某个中间层中,尤其是当这些值变化不大时。根据我的经验,处理这些值的最佳方法是从配置文件中加载它们。这些是很少更改的值,可以在其中添加新值。这些仍然可以缓存并且不需要数据库命中。