fn ($v) => (string) $v, 'role_id' => fn ($v) => $v !== '' ? (int) $v : null, 'sharing_type' => fn ($v) => (string) $v, 'expiration_date' => fn ($v) => $v !== '' ? $v : null, 'shared_sections' => fn ($v) => is_array($v) ? json_encode(array_map('intval', $v)) : null, ]; $data = []; foreach ($map as $col => $cast) { if (array_key_exists($col, $in)) { $data[$col] = $cast($in[$col]); } } if ($data) { $set = implode(', ', array_map(fn ($c) => "$c = ?", array_keys($data))); $pdo->prepare("UPDATE home_sharing SET $set WHERE idsharing = ? AND iduser = ?") ->execute([...array_values($data), $idsharing, $user['id']]); } $stmt = $pdo->prepare( 'SELECT hs.*, sr.role_name, sr.description AS role_description, sr.permissions AS role_permissions FROM home_sharing hs LEFT JOIN sharing_roles sr ON sr.idrole = hs.role_id WHERE hs.idsharing = ? LIMIT 1' ); $stmt->execute([$idsharing]); json_data(present_share($stmt->fetch()));