在php中显示mysql枚举值

在php中显示mysql枚举值,php,mysql,Php,Mysql,朋友们,在插入和更新php页面时,显示mysql枚举值的最佳方式是什么 name ENUM('small', 'medium', 'large') 编辑: 事实上我是要这个的。 我有一个数据库字段 `color` enum('red','blue','green','white') DEFAULT NULL, 和php表单 <label for="color">Colors</label><br /> <input type="text" name

朋友们,在插入和更新php页面时,显示mysql枚举值的最佳方式是什么

name ENUM('small', 'medium', 'large')
编辑: 事实上我是要这个的。 我有一个数据库字段

 `color` enum('red','blue','green','white') DEFAULT NULL,
和php表单

<label for="color">Colors</label><br />
<input type="text" name="color" />
颜色

如何在mysql数据库的php表单上显示枚举值?请帮忙

你的问题不是很清楚。如果您的意思是我应该在php页面的表单中使用什么输入法,那么下面的答案是相关的

您可以使用下拉列表:

<select name="name">
    <option value="small">small</option>
    <option value="medium">medium</option>
    <option value="large">large</option>
</select>

小的
中等的
大的
单选按钮是另一种可能性:

<input type="radio" name="name" value="small"> small
<input type="radio" name="name" value="mediuim"> medium
<input type="radio" name="name" value="large"> large
小
中等的
大的

如果您有一个枚举字段,MySQL将返回该字段的字符串值,您也可以设置整数和字符串值。只需执行以下操作:

mysql_query("select name from tablename");
将为您提供完整的标签,如
小型
中型
大型

同样,您也可以使用以下完整标签对其进行更新:

mysql_query("insert into tablename (name) values ('small')");
mysql_query("update tablename set name = 2");
或者像这样的数值:

mysql_query("insert into tablename (name) values ('small')");
mysql_query("update tablename set name = 2");
您需要执行“showcolumns FROM”以获取表架构。然后可以继续分析每一行

$field = "enumField"; // The field that contains the ENUM
$result=mysql_query('show columns from '.$table.';');
while($tuple=mysql_fetch_assoc($result))
{
    if($tuple['Field'] == $field)
    {
        $types=$tuple['Type'];
        $beginStr=strpos($types,"(")+1;
        $endStr=strpos($types,")");
        $types=substr($types,$beginStr,$endStr-$beginStr);
        $types=str_replace("'","",$types);
        $types=split(',',$types);
        if($sorted)
            sort($types);
        break;
    }
} 
现在,在
$types


注意:该代码是一个快速破解。可以更整洁一些:)

您可以使用以下函数获取所有可能枚举值的数组:

function enum_values($table_name, $column_name) {
    $sql = "
        SELECT COLUMN_TYPE 
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = '" . mysql_real_escape_string($table_name) . "' 
            AND COLUMN_NAME = '" . mysql_real_escape_string($column_name) . "'
    ";
    $result = mysql_query($sql) or die (mysql_error());
    $row = mysql_fetch_array($result);
    $enum_list = explode(",", str_replace("'", "", substr($row['COLUMN_TYPE'], 5, (strlen($row['COLUMN_TYPE'])-6))));
    return $enum_list;
}
在中,可以显示枚举可能的值:

function gender_enums($table , $field){
$query = "SHOW COLUMNS FROM ".$table." LIKE '$field'";
$row = $this->db->query("SHOW COLUMNS FROM ".$table." LIKE '$field'")->row()->Type;  
$regex = "/'(.*?)'/";
        preg_match_all( $regex , $row, $enum_array );
        $enum_fields = $enum_array[1];
        foreach ($enum_fields as $key=>$value)
        {
            $enums[$value] = $value; 
        }
        return $enums;
}

在没有正则表达式的情况下,使用“ShowColumns FROM table”获取MYSQL枚举字符串(例如ENUM('Apple','oranges','pears')后,将类型放入$field[“type”]中,您可以使用以下代码,因为只有使用单引号分解后的奇数数组元素才有用:

$t = explode( "'", $field["Type"] );
for($i=1; $i < count($t); $i += 2)
    echo "<br>Value $i: ".$t[$i];
$t=explode(“”,$field[“Type”]);
对于($i=1;$i值$i:”.$t[$i];

可能一些非常糟糕的枚举值名称选择会导致问题。

请详细说明您想要什么虽然我不能对PHP部分进行评论,但MySQL枚举值可以通过与集合中的值相同的方式获得,请参见例如SO问题。也许可以通过“像$field一样显示$table中的列”来摆脱while循环?