如何在php中循环多个表单输入并分配到sql查询中?

ig9co6j1  于 2021-08-13  发布在  Java
关注(0)|答案(3)|浏览(232)
public function add_employee($input)
{
    $key_array = null;
    $value_array = null;
    $bind_array = null;
    foreach ($input as $column => $value) {
        if ($value) {
            #$bind_array => ?, ?, ?;
            #$value_array => [$value1, $value2, $value3];
            #$key_array => column1, column2, column3;
        }
    }
    $sql = "INSERT INTO ol_employee ($key_array) VALUES ($bind_array)";
    $this->db->query($sql, $value_array);
}

请参阅函数中的注解,如何实现该输出?这个想法是,从我得到的27个字段的输入帖子中,我只想填充到我准备的$sql查询中,如您所见。我不认为手动编写每个表列是一个好方法。
我使用codeigniter4php框架+postgresql。

0tdrvxhp

0tdrvxhp1#

根据codeigniter 4文档,您可以在循环中为每个员工执行以下操作:

$data = [
    'title' => $title,
    'name'  => $name,
    'date'  => $date
];

$db->table('mytable')->insert($data);
elcex8rz

elcex8rz2#

您可以使用array和implode函数,首先生成键数组、值数组和绑定数组的数组,然后使用implode()并在sql中使用,如下所示

public function add_employee($input)
{
    $key_array = array();
    $value_array = array();
    $bind_array = array();
    foreach ($input as $column => $value) {
        if ($value) {
            $bind_array[] = '?';
            $value_array[] = $value;
            $key_array[] = $column;
        }
    }

    $binds = implode(",",$bind_array);
    $keys = implode(",",$key_array);    
    $values = implode(",",$value_array);
    $sql = "INSERT INTO ol_employee ($keys) VALUES ($binds)";
    $this->db->query($sql,$values);
}
mm5n2pyu

mm5n2pyu3#

根据alex granados的见解,这是我使用的查询:

public function add_employee($input)
{
    foreach ($input as $column => $value) {
        if ($value) {
            $data[$column] = $value;
        }
    }

    $this->db->table('ol_employee')->insert($data);
}

这将消除空字段,无论有多少字段,仍然工作良好。只要表单中的输入名称字段与db column相同。否则,我们需要做一些改变。
谢谢你们。

相关问题