在php中显示mysql枚举值

时间:2010-09-15 08:24:32

标签: 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="color" />

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

7 个答案:

答案 0 :(得分:6)

如果你有一个枚举字段,MySQL将为它返回字符串值,你也可以设置整数和字符串值。只需这样做:

mysql_query("select name from tablename");

会为您提供完整的标签,例如smallmediumlarge

您可以使用如下所示的完整标签同样更新它们:

mysql_query("insert into tablename (name) values ('small')");

或像这样的数值:

mysql_query("update tablename set name = 2");

答案 1 :(得分:3)

你需要做一个“SHOW COLUMNS 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中ENUM的可能值 注意:该代码是一个快速入侵。可能会更整洁:)

答案 2 :(得分:2)

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

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;
}

答案 3 :(得分:1)

你的问题不是很清楚。如果你的意思是我应该在我的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

答案 4 :(得分:1)

enum列类型的现有枚举标签,您可以检查枚举可能的值:

    $field_type = $wpdb->get_row("SHOW COLUMNS FROM {$this->table_name} LIKE 'field_name'")->Type;

    preg_match("/^enum\(\'(.*)\'\)$/", $field_type, $matches);
    $enum_string = (isset($matches[1])?$matches[1]:'');
    $enum_array = explode("','", $enum_string);
    echo (in_array('enumlabel', $enum_array)?'already exist':'not exist'); exit;

答案 5 :(得分:0)

Codeigniter中,您可以显示枚举值:

_surfaceVoxels

答案 6 :(得分:0)

没有正则表达式,使用“ SHOW COLUMNS FROM table”将类型放入$ field [“ Type”]后,获得MYSQL ENUM字符串(例如ENUM('apples','oranges','pears')基于以下事实使用以下代码,即只有单引号爆炸后的奇数数组元素才有用:

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

一些非常邪恶的ENUM值名称选择可能会引起问题。