отображение значений mysql enum в php

Привет друзья, что является лучшим способом отображения значений перечисления mysql при вставке и обновлении php-страницы?

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? Пожалуйста помоги

Если у вас есть поле перечисления, MySQL вернет для него строковые значения, и вы также можете установить значения integer и string. Просто так:

 mysql_query("select name from tablename"); 

даст вам полные ярлыки, такие как small или medium или large

И вы также можете их обновить, используя полные метки:

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

или числовые значения, такие как:

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

Вам нужно будет сделать «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; } } в $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; } } 

Теперь у вас есть массив, содержащий возможные значения вашего ENUM в $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; } 

Ваш вопрос не очень ясен. Если вы имеете в виду, какой метод ввода следует использовать в форме на моей 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 

существующие метки enum из типа столбца 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; 

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