检查PHP是否存在表中的MySQL列

时间:2013-07-02 15:18:10

标签: php mysql drupal drupal-7 migration

我想使用migrate-module将Drupal7网站的内容迁移到另一个Drupal7系统。

我必须添加和映射字段。 drupal中每个内容类型的字段都存储在一个名为field_revision_field_name的表中。大多数字段的值位于field_name_value列中。但是有些字段有另一种结构,所以我想检查field_name_value列是否存在。

我正在连接表并在循环中在mysql查询中添加Fields。问题是,并非每个表"field_revision_".$typeFields[$i](别名为$typeFields[$i]."_table")都有一列$typeFields[$i]."_value"

for ($i=0; $i < sizeof($typeFields); $i++) {
    $query->join(
        "field_revision_".$typeFields[$i], 
        $typeFields[$i]."_table", 
        "n.nid = ".$typeFields[$i]."_table.entity_id"
    );
    $query->addField($typeFields[$i]."_table", $typeFields[$i]."_value");       
}

我想在查询之前检查一下,如下所示:

for ($i=0; $i < sizeof($typeFields); $i++) {
  if($typeFields[$i]."_table" has Column $typeFields[$i]."_value"){
    $query->join(
        "field_revision_".$typeFields[$i], 
        $typeFields[$i]."_table", 
        "n.nid = ".$typeFields[$i]."_table.entity_id"
    );
    $query->addField($typeFields[$i]."_table", $typeFields[$i]."_value");
  }       
}

5 个答案:

答案 0 :(得分:2)

  1. @eggyal在关于动态模式不好的评论中说了什么。
  2. information_schema数据库中使用以下查询:

    SELECT *
    FROM `COLUMNS`
    WHERE TABLE_SCHEMA = 'database_name'
      AND TABLE_NAME = 'table_name'
      AND COLUMN_NAME = 'field_name'
    

答案 1 :(得分:1)

使用DESCRIBE查询,其中列出了表中的列。 以下是说明:http://dev.mysql.com/doc/refman/4.1/en/describe.html

答案 2 :(得分:1)

它真的像这个XY问题。

D7函数field_info_field()包含有关存储数据的列的信息,因此我不必询问列是否存在。

但是谢谢你

答案 3 :(得分:0)

也许这可以帮助

$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)');
}

答案 4 :(得分:0)

这样怎么样:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
  AND TABLE_NAME = 'table_name'
  AND COLUMN_NAME = 'field_name'
它与上面的

类似