Esto es casi una discusión religiosa dependiendo de a quién le preguntes. Existe un delicado equilibrio que los desarrolladores y los dbas tienen que conciliar en este tipo de casos.
Básicamente, aquí está el pensamiento que realmente quieres poner en juego:
Si el código PHP usa SQL dinámico, se deben considerar en todo momento las protecciones contra los ataques de inyección SQL. Las entradas DEBEN desinfectarse antes de ponerlas en la base de datos.
Si el código PHP usa SQL dinámico pero la convención es usar declaraciones preparadas, entonces está más seguro hasta cierto punto, pero se debe tener cuidado en cómo se usan las declaraciones preparadas.
Si el código PHP utiliza procedimientos almacenados, gran parte del control de SQL se elimina del desarrollador y se deja en manos del DBA para trabajar con los desarrolladores para proporcionar una solución adecuada que satisfaga sus necesidades. Desafortunadamente, esto puede requerir mucho tiempo y esfuerzo y va y viene en el desarrollo/mantenimiento.
Es una de esas cosas que es un área gris y hay muchas escuelas de pensamiento sobre qué lado de la ecuación es el correcto porque ambos lo son desde ciertos puntos de vista.