准备好的语句和执行中的重复列名

Repeated column names in prepared statement and execution

$_POST['data'] 包含一个 id 和其他需要用此 id.

插入到数据库行中的字段

有没有办法避免这段代码中的冗余:

$data =  json_decode($_POST['data'], true);
$db = new PDO('sqlite:data.db');
$stmt = $db->prepare("UPDATE test SET a=?, b=?, c=?, d=?, e=?, f=? WHERE id=?");
$stmt->execute(array($data['a'], $data['b'], $data['c'], $data['d'], $data['e'], $data['f'], $data['id']));

如何避免重复列名 a, ..., f 两次,一次在准备语句中,一次在数组中?

我们能否完全避免对列名称 a、...、f 进行硬编码,而仅从 $data 数组键中推断它们?

您可以通过使用命名占位符而不是 ? 使其更容易一些。然后你可以将 $data 作为参数传递给 execute()

$stmt = $db->prepare("UPDATE test SET a=:a, b=:b, c=B, d=:d, e=:e, f=:f WHERE id=:id");
$stmt->execute($data);

这只是将冗余从 execute() 参数移动到占位符。但它不那么冗长。