我正在尝试简化我需要构建的查询的绑定参数。由于这些查询最多可包含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));
}
答案 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++;
}