如何使用PDO插入到数据库中要插入的列更改?

时间:2016-09-04 06:44:22

标签: php mysql pdo

我有一个场景,我需要将数据输入数据库;但是我并不总是有相同的数据进入数据库。

我拥有的值都存储在一个数组中。

在单独的变量中还有另一个值,也需要插入。

这是我到目前为止的情况,但我不确定这是否是最好的方式,因为它似乎相当粗糙。

$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种。

所以我将以以下形式获得数据:

  • 供应商1,苹果:0,橙子:2
  • 供应商2,苹果:1,草莓:3
  • 供应商3,苹果:5,香蕉:4

我需要将其插入到同一个表中。

2 个答案:

答案 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;