PHP對數據庫的操作——判斷如果表中無該字段則添加字段 (opencart)

在製作OpenCart的插件中,我經常會遇到修改數據庫表結構的事情,起初爲了方便,是寫了一個sql語句,在安裝插件前讓用戶手動操作一下。

 

但這樣的弊端是,文件不能丟失,還得有足夠的說明,還得保證操作人能有操作數據庫的權限。

 

如果可以把對數據庫的操作寫在插件中,那就好了。執行到需要的地方,自動就執行對數據庫的操作,安全、高效、保證正確率、不需要額外登陸網絡數據庫管理系統。

 

那麼下面就來思考一下,設計的插件,這部分的思路吧:

 

1、首先必須明確的是,這個字段,在這個表中,只能有一個唯一的字段。所以只能是,字段沒有而插入,字段有了就不插入了。

 

2、要插入兩個字段,那麼必須分開判斷,雖然說它們是同一批次創建的,但爲了確保程序的正確率,不宜混在一起操作。

 

3、爲了確保操作的獨立,必須在創建完字段後執行提交,否則因爲後續數據保存問題,造成的回滾,會令本操作再執行一次,效率不高。

 

那麼,就先看看,如何從一張表中查找指定字段?

 

查看錶字段信息的sql語句是:SHOW COLUMNS FROM tablename;

 

在數據庫操作後,我們看到了,它的第一個字段名爲“Field”,就是所有字段的名字。那麼我們只要在這個字段名的數組中做一次遍歷,比對需要的字段名,如果不存在,就可以開始執行創建了。

 

$sql = "SHOW COLUMNS FROM " . DB_PREFIX ."category_description;";

$columns_data = $database->query($sql);


foreach ($columns_data->rows as $row) {
     $col_field[]=$row['Field'];
}

 

in_array('menu_str', $col_field)



$sql = "Alter table `" . DB_PREFIX . "category_description` add `menu_str` varchar(255) default '';";
$database->query($sql);



以下是全文代碼:

function queryAndAlertField($database){
    $sql = "SHOW COLUMNS FROM " . DB_PREFIX ."category_description;";
    $columns_data = $database->query($sql);
    foreach ($columns_data->rows as $row) {
     $col_field[]=$row['Field'];
    }
    
    if(!in_array('menu_str', $col_field)){
     $sql = "Alter table `" . DB_PREFIX . "category_description` add `menu_str` varchar(255) default '';";
     $database->query($sql);
    }
    if(!in_array('category_str', $col_field)){
     $sql = "Alter table `" . DB_PREFIX . "category_description` add `category_str` varchar(255) default '';";
     $database->query($sql);
    }
    $database->query( "COMMIT;" );
   }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章