在php中显示mysql枚举值

dba5bblo  于 2023-02-03  发布在  PHP
关注(0)|答案(7)|浏览(123)

嗨,朋友们,在插入和更新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" />

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

relj7zay

relj7zay1#

**如果您有一个枚举字段,MySQL将返回字符串值,您也可以设置为整数和字符串值。**简单地做:

mysql_query("select name from tablename");

我将为您提供完整的标签,例如smallmediumlarge
同样,您也可以使用如下完整标签更新它们:

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

或者像这样的数值:

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

drkbr07n2#

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

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

3qpi33ja3#

您需要执行“SHOWCOLUMNSFROM“来获取表模式,然后可以继续解析每一行。

$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的可能值。

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

polhcujo4#

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

ycggw6v25#

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

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

lyr7nygr6#

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

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

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

bttbmeg0

bttbmeg07#

因此,ENUM强制数据库从它所枚举值中接受一个值,所以只有一个值可以存储在该表中,然后你像提取任何其他值一样提取它,你不能提取网页中的所有值,你必须在选择标签中手动定义它们,并与数据库中的值进行比较,当你从数据库中退出时激活该选项。

<selec name="color">
<option value="red" selected="<php // here make
 if( value from `$`_POST <<or `$`var_color>>== "red") { 
echo 'red'; }
elseif(`$`_Postvariable <<or `$`var_color>> =='white) { echo "white"; }

或类似的东西,我不记得现在所有的结构使活动==字段选项被选中比较它
例如:'color' enum('red','blue','green','white')数据库将存储颜色为红色(或蓝色或绿色或白色);
当选择表格名称颜色字段时:
您将只获得数据库中该行的“红色”值

相关问题