Php 添加sql Opencart中不存在的列

Php 添加sql Opencart中不存在的列,php,sql,opencart,Php,Sql,Opencart,我正在开放式购物车中创建一个模型。我使用vqMod在模型中编写代码。 若表中不存在冒号,我想通过添加冒号来修改表。 这是我的密码 $field_name = 'GeoZoneID'; $col = $this->db->query("SELECT ".$field_name." FROM ".DB_PREFIX."order"); if (!$col){ $this->db->query("ALTER TABLE ".DB_PREFIX.

我正在开放式购物车中创建一个模型。我使用vqMod在模型中编写代码。 若表中不存在冒号,我想通过添加冒号来修改表。 这是我的密码

$field_name = 'GeoZoneID';
$col = $this->db->query("SELECT ".$field_name." FROM ".DB_PREFIX."order");

    if (!$col){
            $this->db->query("ALTER TABLE ".DB_PREFIX."order ADD ".$field_name." int(11) First");
            $zone_id=array();
    $zone_id=$this->db->query("SELECT zgz.geo_zone_id FROM  `oc_zone_to_geo_zone` AS zgz   WHERE zone_id = (SELECT shipping_zone_id FROM oc_order WHERE order_id = '".$order_id."' ) ");
    $zone_id=$zone_id->row['geo_zone_id'];
    $query=$this->db->query("UPDATE  `oc_order` SET GeoZoneID ='".$zone_id."' WHERE order_id ='".$order_id."'");                
        } 
     else {
    $zone_id=array();
    $zone_id=$this->db->query("SELECT zgz.geo_zone_id FROM  `oc_zone_to_geo_zone` AS zgz   WHERE zone_id = (SELECT shipping_zone_id FROM oc_order WHERE order_id = '".$order_id."' ) ");
    $zone_id=$zone_id->row['geo_zone_id'];
    $query=$this->db->query("UPDATE  `oc_order` SET GeoZoneID ='".$zone_id."' WHERE order_id ='".$order_id."'");                

        }

我不知道为什么它不执行,它不会改变我的表格。

我最终像这样解决了我的问题

$hasModelChoiceField = FALSE;
$result = $this->db->query( "DESCRIBE `".DB_PREFIX."order`;" );
foreach ($result->rows as $row) {
if ($row['Field'] == 'GeoZoneID') {
$hasModelChoiceField = TRUE;
break;
 }
 }
 if (!$hasModelChoiceField) {
 $sql = "ALTER TABLE `".DB_PREFIX."order` ADD GeoZoneID INT( 11 ) CHARACTER SET utf8 COLLATE utf8_general_ci  DEFAULT ''";
 $this->db->query( $sql );
 $zone_id=array();
 $zone_id=$this->db->query("SELECT zgz.geo_zone_id FROM `" . DB_PREFIX . "oc_zone_to_geo_zone`  AS zgz WHERE zone_id = ( SELECT shipping_zone_id FROM `".DB_PREFIX."order`WHERE order_id = '".$order_id."' ) ");$zone_id=$zone_id>row['geo_zone_id'];$query=$this->db->query("UPDATE  `" . DB_PREFIX . "order` SET GeoZoneID ='".$zone_id."' WHERE order_id ='".$order_id."'");
 }
else{
    $zone_id=array();
    $zone_id=$this->db->query("SELECT zgz.geo_zone_id FROM`oc_zone_to_geo_zone` AS zgzWHERE zone_id = ( SELECT shipping_zone_idFROM oc_orderWHERE order_id = '".$order_id."' ) ");$zone_id=$zone_id->row['geo_zone_id'];$query=$this->db->query("UPDATE  `" . DB_PREFIX . "order` SET GeoZoneID ='".$zone_id."' WHERE order_id ='".$order_id."'");

}

只需在模型零件中使用以下功能即可。如果数据库中不存在,它将创建您的列

public function checkFieldInModel() {
  $isModelField = FALSE;
  $result = $this->db->query( "DESCRIBE `".DB_PREFIX."order`;" );
  foreach ($result->rows as $row) {
     if ($row['Field'] == 'GeoZoneID') {
        $isModelField = TRUE;
        break;
     }
  }
  if (!$isModelField) {
     $sql = "ALTER TABLE `".DB_PREFIX."option` ADD `GeoZoneID` int( 11 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ''";
     $this->db->query( $sql );
  }
}
或者使用以下命令直接在DB中添加一列:

ALTER table database.table\名称添加列\名称数据\类型字符 设置utf8 COLLATE utf8\u general\u ci不为空


ALTER table cart.oc\u product\u option\u value add pc\u code varchar(255)字符集utf8 COLLATE utf8\u general\u ci NOT NULL

只是一个建议(可能无法解决问题):将
$col
查询更改为
“从`显示列”。DB_前缀。“\u order`where`Field`='{$Field\u name}'”
,然后使用
if($col->num\u rows==0)
进行检查,最好提供有关哪个部分未执行的更多详细信息