gpt4 book ai didi

php - 有没有更安全的方法来使用 PDO 来避免不必要的查询?

转载 作者:行者123 更新时间:2023-11-29 04:52:13 26 4
gpt4 key购买 nike

我正在使用类似于下面的代码插入 mysql 数据库(使用 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 的建议。帮了大忙,谢谢!

最佳答案

未经测试。仍然使用准备好的语句。

$numColumns = 5; //or $numColumns = count($stqid[0]);
$rowPlaceholder = join(', ', array_fill(0, $numColumns, '?'));
$rowPlaceholders = array_fill(0, $totalQ, "($rowPlaceholder)");
echo $sql = "INSERT INTO results(instance, qid, result, start, finish) VALUES " . join(", \n", $rowPlaceholders);
$flat = call_user_func_array('array_merge', $stqid);
$stmt = $dbh->prepare($sql);
$stmt->execute($flat);

关于php - 有没有更安全的方法来使用 PDO 来避免不必要的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10527579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com