我有一个场景,我需要将数据输入数据库;但是我并不总是有相同的数据进入数据库。
我拥有的值都存储在一个数组中。
在单独的变量中还有另一个值,也需要插入。
这是我到目前为止的情况,但我不确定这是否是最好的方式,因为它似乎相当粗糙。
$cols = "Id, ";
$vars = ":Id, ";
$start = "INSERT INTO table (";
$mid = ") VALUES (";
$end = ")";
foreach($array as $key => $val){
$cols .= ", " . $key;
$vars .= ", :" . $key;
}
// Probs a better way to do this?
}
$stm = $this->db->prepare($start . $cols . $mid . $vars . $end);
//Now I use this statement to enter variables into DB
只是为了澄清我希望帮助解释我正在尝试做什么的数据。想象一下,我有一张桌子,列出了每天特定供应商销售的水果数量。因此,这些栏目将是苹果,香蕉,橘子,草莓。
现在供应商可能只销售一种水果,在这种情况下,我只会提供该类水果的数据。然而,供应商也可能出售两种不同类型的水果,他们也可能出售他们销售的水果中的0种。
所以我将以以下形式获得数据:
我需要将其插入到同一个表中。
答案 0 :(得分:1)
看起来我在这里找不到其他替代解决方案。但是我想提一下,根据对这个问题的评论;当你允许像这样动态选择列时,你需要警惕SQL注入。
文章here很好地解释了需要采取哪些措施来防止SQL注入。
答案 1 :(得分:-3)
你可以试试这个
$array = array('id'=>1, 'name'=>'harry', 'age'=>14);
$cols_array = array();
$vals_array = array();
foreach($array as $key => $val){
$cols_array[] = "'".$key."'";
$vals_array[] = "'".$val."'";
}
$cols_string = implode(",",$cols_array);
$vals_string = implode(",",$vals_array);
$insQry = sprintf(" INSERT INTO table (%s)
VALUES (%s)
",
$cols_string,
$vals_string);
echo $insQry;