private function insertUpdate(Connection $conn, $tableName, array $data, $identifier = null)
{
if (is_numeric($identifier)) {
$identifier = ['id', $identifier];
}
$columnNames = array_keys($data);
$values = array_values($data);
if ($identifier) {
$updateSql = implode(', ', array_map(function ($value) {
return sprintf('%s = ?', $value);
}, $columnNames));
$stmt = $conn->prepare(sprintf('UPDATE %s SET %s WHERE ? = ?', $tableName, $updateSql));
$values[] = $identifier[0];
$values[] = $identifier[1];
$stmt->execute($values);
return $identifier[1];
}
$insertSql = implode(', ', $columnNames);
$placeholders = implode(', ', array_fill(0, count($columnNames), '?'));
$stmt = $conn->prepare(sprintf('INSERT INTO %s (%s) VALUES (%s)', $tableName, $insertSql, $placeholders));
$stmt->execute($values);
return $conn->lastInsertId();
}