我正在使用类似于下面的代码插入 mysql DB(使用 PDO。)目的是仅使用一个查询插入数据。不幸的是,它违背了使用 PDO 的目的,因为它没有使用 bindValue 或 param。我想编写代码以使其更安全但仍避免不必要的查询。谁能推荐如何做到这一点?
注意1:每次访问程序时,集合中的问题数量可能会发生变化(即$totalQ
每次运行时可能会有所不同)。
try
{
for ($i=0; $i<$totalQ; $i++)
{
$stqid[$i][0]=$lastInsertValue; //instance PDO::PARAM_INT
$stqid[$i][1]=$jqid[$i][0]; //question number PDO::PARAM_INT
$stqid[$i][2]=$jqid[$i][5]; //result PDO::PARAM_INT
$stqid[$i][3]=$jqid[$i][3]; //question start PDO::PARAM_STR
$stqid[$i][4]=$jqid[$i][4]; //question finish PDO::PARAM_STR
}
$values = array();
foreach ($stqid as $rowValues)
{
foreach ($rowValues as $key => $rowValue)
{
$rowValues[$key] = $rowValues[$key];
}
$values[] = "(" . implode(', ', $rowValues) . ")";
}
$count = $dbh->exec("INSERT INTO results(instance, qid, result, start, finish) VALUES ".implode (', ', $values));
$dbh = null;
}
注意 2:开始和结束的时间格式中的逗号可能会导致 implode 语句出错。我刚刚添加了它们,所以你可以看到我想要实现的目标。
任何帮助将非常感激。谢谢。
编辑:虽然我选择了克里斯的回答,但我非常感谢 Alix Axel 的建议。帮助很大,谢谢!