SQLITE:检查列是否存在而不在php中触发错误

时间:2014-07-01 13:36:06

标签: php sqlite pdo

我的情况是这样的:

  • 我有一个包含表格列
  • 的名字的数组
  • 我必须通过循环遍历数组并检查表中是否存在该字段(此列名称)
  • 如果它存在,我什么都不做,否则我必须添加

    $array_column = ["column1 NOT NULL","column2 NOT NULL","column3 NOT NULL","column4 NOT NULL"];
    
    for($j = 0 ; $j < count($array_column) ; $j++){
    
      $query = "SELECT ".$array_column[$j]." FROM my_table";
      $result = $db->query($query);
    
      $check = false;
      //try{
         foreach ($result as $row) { //error here
            $check = true;
         }
      //}catch (Exception $e) {
        //echo "here";
        //$check = false;
      //}
    
      if(!$check){
        echo "column [".$array_column[$j]."] to add <br>";
      } 
    
    }
    

但是当我发现表中不存在的列时,php会给我错误

Warning: Invalid argument supplied for foreach ()

我也试过TryCatch,但是同样的错误。 我希望php没有找到列

时没有返回该错误

更新1:

我试试这个,它有效,但不幸的是,当表中没有记录时

$select = $db->query('SELECT * FROM mytable');

$total_column = $select->columnCount();
var_dump($total_column);

for ($counter = 0; $counter <= $total_column; $counter ++) {
      $meta = $select->getColumnMeta($counter);
      $column[] = $meta['name'];
}
print_r($column);

更新2:即使表中没有记录,此解决方案也能正常运行!

$result = $db->query("PRAGMA table_info(test2)");
$result->setFetchMode(PDO::FETCH_ASSOC);
$meta = array();
foreach ($result as $row) {
   array_push($meta, $row['name']);
}

2 个答案:

答案 0 :(得分:3)

PRAGMA table_info('table_name')将返回一个行列表(表中每列一个) 遗憾的是,您无法在选择查询中使用它,但您可以解析它并尝试在查询表之前查找列名称。 希望有帮助

答案 1 :(得分:0)

您可以使用sqlite_fetch_column_types函数获取包含表格列名的数组。然后可以在循环中使用此数组。