【发布时间】:2014-08-22 02:18:40
【问题描述】:
我的情况是这样的:
- 我有一个包含表列名称的数组
- 我必须使用循环遍历数组并检查表中是否存在该字段(此列名)
-
如果存在,我什么都不做,否则我必须添加
$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']);
}
【问题讨论】:
-
不是重复的@Phantom,因为您必须从 SQLite 获取数据的方式与使用 MySQL 的方式相比。