首页 > 解决方案 > 准备好的语句和执行中的重复列名

问题描述

$_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数组键中推断它们吗?

标签: phpsqlitepdoprepared-statement

解决方案


您可以使用命名占位符而不是?. 然后你可以$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()参数移动到占位符。但它不那么冗长。


推荐阅读