准备好的语句和执行中的重复列名
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()
参数移动到占位符。但它不那么冗长。
$_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()
参数移动到占位符。但它不那么冗长。