我正在尝试使用PHP在下拉菜单中填充来自单独表的某些列的数据。但是,我有很多菜单要填充,所以我没有为每个菜单创建一个特定的函数,而是想将列名(这是字段,对吧?)传递给函数。
目前我有一个菜单
function print_dropdown($query, $link){
$queried = mysql_query($query, $link);
$menu = '<select name="wholesaler" id="wholesaler">';
while ($result = mysql_fetch_array($queried)) {
$menu .= '<option value="' . $result['id'] . '">' . $result['wholesaler'] . '</option>';
}
$menu .= '</select>';
return $menu;
}
...
<?php echo print_dropdown("SELECT id, wholesaler FROM wholesaler_flag LIMIT 0, 10", $connect_normas_boudoir);
?>
但是,我想这样做:
function get_field($table){
$col_2 = mysql_query('SHOW COLUMNS FROM "$table" WHERE FIELD = 2');
return $col_2;
}
function print_dropdown($query, $link){
$queried = mysql_query($query, $link);
$menu = '<select name="'$col_2'" id="'$col_2'">';
while ($result = mysql_fetch_array($queried)) {
$menu .= '<option value="' . $result['id'] . '">' . $result['$col_2'] . '</option>';
}
$menu .= '</select>';
return $menu;
}
...
<?php
get_field(wholesaler_flag);
echo print_dropdown("SELECT id, wholesaler FROM wholesaler_flag LIMIT 0, 10", $connect_normas_boudoir);
?>
尝试选择每个表的第二个字段是不是很糟糕?就我而言,每个表中只有两列有关。但是,据我所知,未来理论上可以在id之后插入一个新列。有一个更好的方法吗?如果我搞砸了单引号和双引号,请原谅。还在学习。
注意:我在MySQL控制台中尝试了SHOW COLUMNS FROM wholesaler_flag WHERE FIELD = 2;
。当然它不起作用,但我认为可能有一种方法可以访问它。这是我的问题涉及的具体领域。
答案 0 :(得分:0)
你到底想要做什么?要从字段中选择第n行,如果您正在执行 SELECT 查询,那么将是:
SELECT * FROM table LIMIT n-1,1
但是,您在查询 SHOW COLUMNS 上执行此操作,该查询不依赖于行号。您可以选择第5行或第50行(在该查询中无论如何都不可能)并且它仍将返回相同的结果(有关表的列的信息)。
您可以轻松地将字段/表名称传递给函数并构建类似的查询。但是,在给定的示例中,鉴于PHP / SQL语法不正确,您不清楚要使用函数完成什么。
基于评论反馈编辑: 您可以编写一个函数来获取表和目标列号,然后将列名称传递给您。以下函数将获取SQL表(即“wholesaler_flag”)和所需列的编号(即示例中所述的2)。
function getColumnName($sqlTable, $targetColumn = 2) {
$currentColumn = 1; // indicate our starting position for the column traversal
$theQuery = mysql_query("SHOW COLUMNS FROM " . $sqlTable); // get columns from table
// traverse columns until we reach the desired column number; return column name
while ($theColumn = mysql_fetch_array($theQuery)) {
if ($currentColumn == $targetColumn) {
return $theColumn["Field"];
}
$currentColumn++;
}
return false; // returns Boolean false if column number is not found
}
可以通过以下方式调用:
$columnName = getColumnName("wholesaler_flag", 2);
// $columnName = getColumnName("wholesaler_flag"); also works since 2 is set as the function's default column
您也可以使用它来获取第3,4列等等或任何您想要的内容。只需稍加修改,您还可以返回一系列列。
答案 1 :(得分:0)
function print_dropdown($query, $link,$field0,$field1){
$queried = mysql_query($query, $link);
$menu = '<select name="'.$field1.'" id="'.$field1.'">';
while ($result = mysql_fetch_array($queried)) {
$menu .= '<option value="' . $result[0] . '">' . $result[1] . '</option>';
}
$menu .= '</select>';
return $menu;
}
<?php
echo print_dropdown("SELECT id, wholesaler FROM wholesaler_flag LIMIT 0, 10", $connect_normas_boudoir,"id","wholesaler");
?>
由于您将sql语句传递给函数,为什么不传递所需的选项id和选项值名称。有了上面的内容,你应该总是提供id作为第一列,在sql语句中将其命名为第二列,因为选项值固定为第一列,值分别设置为第二列,即$result[0]
和$result[1]
。你可以尝试以上。感谢。