Home > Software design >  Repeated column names in prepared statement and execution
Repeated column names in prepared statement and execution

Time:09-22

$_POST['data'] contains an id and other fields that need to be inserted in a DB row with this id.

Is there a way to avoid redundancy in this code:

$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']));

How to avoid to repeat the column names a, ..., f twice, once in the prepared statement, and once in the array?

Can we totally avoid to hardcode the column names a, ..., f, and just infer them from the $data array keys?

CodePudding user response:

You can make it a little easier by using named placeholders rather than ?. Then you can just pass $data as the argument to 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);

This just moves the redundancy from the execute() parameter to the placeholders. But it's less verbose.

  • Related