Как и отметил Андрей (выше), лучший вариант - это 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']; 
}