Как и отметил Андрей (выше), лучший вариант - это DATETIME. Немного расширю его ответ.
Но начну с того, что я немного пофикшу твой код - SQL-инъекции, ибо у тебя нет даже подготовленных запросов или хотя бы mysqli_real_escape_string, а обычной инкапсуляцией тебе тут не обойтись, хоть это и эффективный метод защиты от инъекций. Но не суть.
Текущую дату можно записывать даже без объявления какой либо переменной, используя значение времени NOW() выражением INSERT INTO. То-есть:
$db->prepare("INSERT INTO get_free (name, time) VALUES (?, NOW())");
$db->bindValue(1, $name, PDO::PARAM_STR);
$db->execute();
Это вставит текущую дату и время со значением NOW(), что эквивалентно использованию функции date('Y-m-d h:i:s'). Аналогично для обновления записей в базе данных можно использовать ключевое слово UPDATE, имя таблицы, а затем значения, которое нужно обновить:
$db->prepare("UPDATE get_free SET time = NOW() WHERE name = ?");
$db->bindValue(1, $name, PDO::PARAM_STR);
$db->execute();
В случае сравнения времени - все немного сложнее. Я не особо понимаю что за мешанина у тебя в коде, но для твоих действий можно использовать метод TIMESTAMPDIFF() для вычисления количества секунд между текущим временем, который можно получить с помощью значения NOW() и временем, хранящимся в базе данных. Примерно так:
function get_time($name, $db) {
$query = $db->prepare("SELECT TIMESTAMPDIFF(SECOND, time, NOW()) AS seconds FROM get_free WHERE name = ?");
$query->bindValue(1, $name, PDO::PARAM_STR);
$query->execute();
$result = $query->fetch(PDO::FETCH_ASSOC);
return $result['seconds'];
}