Вы не возвращаете значение рекурсивной функции, поэтому, если функция вызывается рекурсивно, вы не получите никакого значения обратно. Вам нужно сделать:
return generate_session_id( $db );
Тебе здесь вообще не нужна рекурсия. Просто сделайте нормальный цикл:
do {
// generate id
$id_exists = // look if id exists
} while ($id_exists);
Кроме того, вам действительно нужно сгенерировать идентификатор самостоятельно? Используете ли вы какую-то обработку сеанса, которая требует этого?