Мне нравится использовать ассоциативный массив вместо отдельных переменных.Ассоциативный массив отображает строковый ключ на значение.
Я в конечном итоге передам этот ассоциативный массив методу PDOStatement::execute()
в качестве параметров для подготовленного оператора.Это означает, что должны присутствовать все ключи, и только ключи, указанные в подготовленном операторе.
Поэтому мне нужно, чтобы мой массив параметров был заполнен значениями по умолчанию, если они не находятся вмассив, и мне нужно, чтобы он был усечен для удаления ненужных элементов.
public function fillAndTruncate($params, $paramDefaults) {
$params = array_merge($paramDefaults, array_intersect_key($params, $paramDefaults));
return $params;
}
Я мог бы использовать эту функцию следующим образом:
$paramDefaults = [
'name' => NULL,
'phone' => NULL,
'age' => 0,
'country' => 'USA'
];
$sql = 'INSERT INTO mytable SET name = :name, phone = :phone, age = :age, country = :country';
$stmt = $pdo->prepare($sql);
$stmt->execute(fillAndTruncate($_POST, $paramDefaults));