I think the inconsistency you see is just a misunderstanding. When he says you shouldn't mock the database he doesn't mean that all tests should run against a real persistent database. If that was the case, a test might change data in such a way it would affect the following tests. This is a no-go.
More likely means something like using the real database engine, but creating fresh data per test and reset the data after each test. For example you could have an SQL script which drops all tables and then recreated them in a known state, before each test.