php - 准备好的语句和执行中的重复列名
问题描述
$_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()
参数移动到占位符。但它不那么冗长。
推荐阅读
- python - 在 Scrapy Python 中实现分块抓取页面
- ruby-on-rails - 如何正确指示has_many:通过关联销毁对象?
- ios - 复制/粘贴 UIMenuItem 未显示在我的所有应用程序中
- continuous-integration - 运行带有对话框的应用程序的 Azure DevOps 代理
- elasticsearch - 在 Elasticsearch 中按内部字段搜索
- c# - 测试文件是否完整且未被其他进程/(外部)程序/线程/锁定
- java - 锁定多个对象
- c# - osm-File(osm.pbf) 的处理和过滤在 C# 中花费的时间太长
- node.js - 使用带有 bunyan 的 stackdriver 日志记录时,即使在 gcp 的 vm 实例中也会出现 PERMISSION_DENIED 错误
- java - 如何在 aws cloudwatch 中禁用调试日志