在预处理语句和执行中重复列名



$_POST['data']包含一个id和其他字段,这些字段需要与这个id一起插入到DB行中。

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

$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()参数移动到占位符。但是它不那么啰嗦。

最新更新