简化了创建绑定参数的功能

时间:2015-07-31 05:59:46

标签: php

我正在尝试简化我需要构建的查询的绑定参数。由于这些查询最多可包含30列,因此我想要一种巧妙的方法来为查询生成占位符并将其分配给它们。

function get_placeholder_array($array) {
    $return = array();
    foreach ($array as $item) {
        $return[$item] = ":$item";
    }
    return $return;
}

根据需要,为插入查询生成一个数组,如下所示:

Array (
    [a] => :a
    [b] => :b
    ...etc
)

现在我的问题在这里,我将如何生成从用户输入传递的实际绑定,前提是它们的列名与列相同( 我知道,不好的做法,不幸的是我没有不要写出这个规范,也不能偏离大纲。 )。

因此,如果我有用户输入的数据:

$data = array(
    'a' => 'Some user input',
    'b' => 'Some other boring user input',
);

我正在寻找一个简化版本,因为我可以创建一个这样的简单函数来实现它,但我正在寻找“更时尚”的东西:

function make_bind_array($keys, $data) {
    $response = array();
    foreach($keys as $key) {
        $response[":{$key}"] = $data[$key];
    }
    // return
    return $response;
}

那么有一种简化的方法可以实现上述目标吗?或者我只是采用它?

澄清

我这样做是为了尽量减少我必须编写的“垃圾”代码的数量,所以基本上采用了这样的函数:

function doing_stuff($data) {
    $sql = $this->db->insert(
        'a' => ':a',
        'b' => ':b',
        'c' => ':c',
        'd' => ':d',
        'e' => ':e',
        'f' => ':f',
        'g' => ':g',
        'h' => ':h',
        'i' => ':i',
        'j' => ':j',
        'k' => ':k',
        'l' => ':l',
       ....etc
    , 'table');

   // create bind array and assign all a,b,c,d,e.... with the data element...
}

我希望它将用户输入(即$POST)分配给占位符

对于这样的事情:

function doing_stuff($data) {
    $sql = $this->db->insert(get_placeholder_array($this->columns), 'table');
    $this->db->query($sql, make_bind_array($this->columns, $data));
}

1 个答案:

答案 0 :(得分:0)

如果我没有出错,你需要一个数值前面带有“:”的数组吧?

DateFormat time = new SimpleDateFormat("HH:mm");
try
{
    timefrom =(Time) time.parse(json.get(position).toString());
    timeto = (Time) time.parse(json.get(position).toString());
} 
catch (ParseException e)
{
    e.printStackTrace();
}

Calendar cal = Calendar.getInstance();

System.out.println("times are :"+timefrom+" "+timeto+" "+position);//null null 0 was output for this

for(Time i=timefrom;i.equals(timeto);)
{
    cal.setTime(i);
    System.out.println("values are:" + i);
    mor_names[val]=(String) i.toString();
    cal.add(Calendar.MINUTE, 15);
    System.out.println("values are:" + mor_names[val]);
    String newTime = df.format(cal.getTime());
    try
    {
        i=new java.sql.Time(time.parse(newTime).getTime());
    } 
    catch (ParseException e)
    {
        e.printStackTrace();
    }
    val++;
}