Con PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
fetch siempre lanzará una excepción si hay un error. Puede manejar aquellos en su bloque catch y no importa lo que devuelva. Por lo tanto, si no detectó una excepción y devolvió falso, puede asumir con seguridad que se debió a un conjunto vacío. Esta es una forma muy efectiva de manejar los errores de PDO. Para responder a su pregunta, hay muchas formas de simular un error. La más básica es la sintaxis de consulta incorrecta. También puede intentar vincular un parámetro que no está allí, vincular la cantidad incorrecta de parámetros, etc. Cuanto más tiempo use este esquema, más tipos de errores/excepciones verá. Es muy efectivo ya que cada error incluye un mensaje detallado para ayudarte a depurarlo.