【问题标题】:How to explode the values in the array and it as a separate columns by creating it dynamically using codeigniter如何通过使用codeigniter动态创建数组中的值并将其分解为单独的列
【发布时间】:2020-07-15 09:04:32
【问题描述】:
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) 值并将其作为单独的列存储在表中。

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

【问题讨论】:

    标签: javascript php sql codeigniter


    【解决方案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;
    

    【讨论】:

    • 感谢您的回复先生,我也尝试过这种方法,但是当我删除 end($checkedfileds) 行时它工作正常,但是对于单个复选框它不起作用,当我点击两个复选框时它只是在表中添加..我不知道为什么。
    • @Deeksha 啊.. 很抱歉我把 $qry 的值颠倒过来了,现在已经修复了。
    【解决方案2】:

    尝试在每一列中添加varchar(255)

    $input=$_POST['CheckedFileds'];
    $checkedfileds = array_map(function($value) { return $value." varchar(255)"; }, $input);
    $fields=implode(',',$checkedfileds);
    

    【讨论】:

    • 先生,这个现在工作正常,但现在我需要保存 int(11) 中的第一个值和 varchar(255) 格式中的第二个值..我像 $checkedfileds 一样更改了这一行= array_map(function($value) { return "ADD"." "."add_to_".$value." varchar(255) NOT NULL"; }, $input);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    相关资源
    最近更新 更多