Как я могу проверить, существует ли хотя бы столбец таблицы mysql? - PullRequest
11 голосов
/ 27 ноября 2009

Как я могу проверить, существует ли поле таблицы mysql?

Имя столбца - «цена», и мне нужно посмотреть, существует ли он.

Не совсем понял, как работает «СУЩЕСТВУЮЩИЙ» ...

Есть примеры или идеи?

Спасибо

Ответы [ 8 ]

22 голосов
/ 27 ноября 2009

В PHP:

$fields = mysql_list_fields('database_name', 'table_name');
$columns = mysql_num_fields($fields);
for ($i = 0; $i < $columns; $i++) {$field_array[] = mysql_field_name($fields, $i);}

if (!in_array('price', $field_array))
{
$result = mysql_query('ALTER TABLE table_name ADD price VARCHAR(10)');
}

Это также должно помочь вам:

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = ‘TEST’ AND COLUMN_NAME = ‘TEST_DATE’)
BEGIN
  ALTER TABLE TEST ADD TEST_DATE DATETIME
END

Или вы можете сделать:

Show columns from table like 'string';

Был подобный вопрос, заданный ТАК раньше.

3 голосов
/ 06 апреля 2012

Еще один способ сделать это в PHP:

$chkcol = mysql_query("SELECT * FROM `table_name` LIMIT 1"); 
$mycol = mysql_fetch_array($chkcol); 
if(isset($mycol['price'])) 
  echo "Column price exists! Do something...";
3 голосов
/ 27 ноября 2009

Попробуйте:

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TEST' AND COLUMN_NAME = 'Price')
BEGIN
    -- do something, e.g.
    -- ALTER TABLE TEST ADD PRICE DECIMAL
END
1 голос
/ 24 ноября 2013

хорошо, здесь есть функция, чтобы проверить, существует ли определенный столбец или нет.

public function detect_column($my_db, $table, $column)
{
    $db = mysql_select_db($my_db); //select the database
    $sql = "SHOW COLUMNS FROM $table LIKE '$column'"; //query
    $result = mysql_query($sql);                     //querying
    if(mysql_num_rows($result) == 0)        //checks the absence of column
        echo "column $column doesn't exist !";
        // write your code here! 
    else
        echo "column $column exists!";
}

Хорошо, если вы разрабатываете каркас, эта функция может вам помочь. Эта функция проверяет наличие столбца, когда $ flag установлен в «1», и отсутствие столбца, когда $ flag установлен в «0».

public function detect_column($my_db, $table, $column, $flag)
{
    $this->select_db($my_db); //select the database
    $sql = "SHOW COLUMNS FROM $table LIKE '$column'";
    $result = mysql_query($sql);
    if(mysql_num_rows($result) == $flag)
        return true;
    else
        return false;
} 
1 голос
/ 12 декабря 2012

Я нашел это очень полезным. В нем будут перечислены все таблицы с таким именем столбца.

SELECT table_name, 
       column_name 
FROM   information_schema.columns 
WHERE  column_name LIKE '%the_column_name%' 
1 голос
/ 27 ноября 2009

Ну, один из способов сделать это:

select price from your_table limit 1

Если вы получили ошибку:

#1054 - Unknown column 'price' in 'field list'

тогда его не существует.

0 голосов
/ 07 февраля 2016

Я только что сделал что-то подобное, используя эту функцию для Wordpress, для таблиц обновления, в которых есть новые изменения

public function alterTable() {

    $table_name = $this->prefix . $this->tables['name'];

    $select = "select * from `{$table_name}` where 0=0 limit 1;";
    $query = $this->db->get_results($select, ARRAY_A);


    if (isset($query[0]) && !key_exists('adv', $query[0])) {
        $sql = "ALTER TABLE `{$table_name}` ADD `me` INT NULL DEFAULT NULL ;";
        $this->db->query($sql);
    }

}

0 голосов
/ 27 ноября 2009

Вы можете получить описание всех столбцов в вашей таблице.

desc your_table;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...