Du tout du tout. La protection doit être faite dans le rowCount(). Et justement c'est le cas. Qui peut savoir si rowCount n'a pas été surchargé pour logger, déclencher une sychronisation de bdd, positionner une variable ? Si les données sont modifiées à l'avance, il y aura les caractères d'échappement là où il ne devrait pas les avoir.

De plus, à ce stade on ne connaît pas la couche de persistance. Mysql protège les cotes avec '\' il me semble. Peut-être un autre SGBD doublera ce caractère ? Il est dangereux de faire l'hypothèse du SGBD ici.