小编典典

如何通过使用Codeigniter动态创建数组并将数组中的值分解为单独的列

sql

public function addDynFields()
{
    $checkedfileds=$_POST['CheckedFileds'];
    $fields=implode(',',$checkedfileds);
    $dynflds = strtolower($fields);
    $dynclmns = 'add_to'.'_'.$dynflds;
    if($fields == 'Title')
    {
        $this->db->query("ALTER TABLE `pm1asset_dynamic_fields` ADD ".$dynclmns." int(11) NOT NULL");
    }
    else
    {
        $this->db->query("ALTER TABLE `pm1asset_dynamic_fields` ADD ".$dynclmns." varchar(255) NOT NULL");
    }
}

上面的代码是控制器代码。这$checkedfileds是数组形式的多个复选框值。在这里,我想爆炸$checkedfileds(Array)值并将其存储为表格中的单独列。

如果我将其中包含$checkedfileds$this->db->query("ALTER TABLE pm1asset_dynamic_fields ADD ".$checkedfileds." varchar(255) NOT NULL");内容作为数组创建为表中的列名,那么假设我将其中包含$dynclmns$this->db->query("ALTER TABLE pm1asset_dynamic_fields ADD ".$dynclmns." varchar(255) NOT NULL");内容创建为add_to_title但未创建下一个列,则我不知道为什么不创建它。谁能帮帮我吗..


阅读 161

收藏
2021-05-16

共1个答案

小编典典

尝试修复您的sql查询语法,并修改您的代码,如下所示:

$checkedfileds = $_POST['CheckedFileds'];
$qry = "ALTER TABLE `pm1asset_dynamic_fields` ";
foreach ($checkedfileds as $key => $value) {
    $dynflds = strtolower($value);
    $dynclmns = 'add_to' . '_' . $dynflds;
    if ($value == 'Title') {
        $qry .= "ADD COLUMN `" . $dynclmns . "` int(11) NOT NULL";
    } else {
        $qry .= "ADD COLUMN `" . $dynclmns . "` varchar(255) NOT NULL";
    }
    end($checkedfileds);
    // use (;) for the last row, otherwise use (,)
    if ($key === key($checkedfileds)) {
        $qry .= ";";
    } else {
        $qry .= ", ";
    }
}
$this->db->query($qry);

这将生成如下查询:

ALTER TABLE `pm1asset_dynamic_fields` 
ADD COLUMN `add_to_title` int(11) NOT NULL,
ADD COLUMN `add_to_col2` varchar(255) NOT NULL,
ADD COLUMN `add_to_col3` varchar(255) NOT NULL;
2021-05-16