Bueno no tengo del todo claro lo de PDO, puesto que hace poco estoy investigando el tema....
Pero con respecto a tus inquietudes lo que tengo entendido y saque en limpio es lo siguiente:
1> Si es cierto, pero si usas las sentencias preparadas y aparte utilizas en tus consulta o ? o :categoria que son los placeholders o marcadores, que indican que en ese lugar va a ir un valor. En ese caso si la variable es sanada, no en el caso que ya pases la consulta directamente.
2> Generalmente en producción, se trata de no volcar errores por pantalla que puedan dar información de la estructura de tu base, pero si capturas todos los errores y los cambias por otro tipo de mensaje quizás no tengas problemas.
3> Lo que sacaría es el uso del sprintf de:
$query = sprintf("SELECT nombre FROM categorias");
No tiene mucho sentido pues no das formato ni insertas variables a la consulta.
Lo mismo que en $query = sprintf("INSERT INTO categorias (nombre) values ('$this->nombreCategoria')"); pues ya le pasas la variable
Generalmente se usa para
consultas prefabricadas y tu solo le pasas los parametros...
En el segundo caso podrías variar por ejemplo
Código PHP:
Ver original$sql = "INSERT INTO categorias (nombre) values (%s) ";
$query= sprintf( $sql, $this->nombreCategoria );
O puedes usar las consultas preparadas de PDO con los marcadores, que en el enlace que dejas te muestra como se hace.
4> En lo personal me parece mas practico tener una clase separada como la tienes.
5> Si utilizas una instancia, pues estas usando un
patrón singleton, es decir tu no accedes directamente al constructor pues este es privado, entonces lo haces con DB::getInstance() que lo que hace es fijarse si ya se instancio la clase si es así te retorna la instancia que ya tiene si no genera la instancia y te la retorna...
Espero te sea de ayuda...
Saludos