Inoltre manca anche un minimo controllo sui dati inseriti.

Per esempio, metti caso inserisci un apostrofo in un campo, la query darà errore perchè l'apostrofo è un carattere che il MySQL usa anche per separare i valori delle variabili.

Codice PHP:
$query "INSERT INTO tabella (nome1, nome2) VALUES ('" $_POST['valore1'] . "', '" $_POST['valore2'] . "')"
Ponendo che da un form passi al campo di nome valore1 un valore come dell'amico nella query il PHP andrà a fare questo lavoro:

Codice PHP:
$query "INSERT INTO tabella (nome1, nome2) VALUES ('dell'amico', '" $_POST['valore2'] . "')"
Capirai anche da solo che quell'apostrofo sballa tutto perchè è come se chiudesse quel valore.

Per evitare questi problemi c'è una semplice funzione PHP che inserisce per questi caratteri speciali quello di escape: lo slash, che fa sì che quei caratteri vengano visti come normali caratteri e non vadino a modificare la query.

La funzione in questione è addslashes():

Codice PHP:
// ESEMPIO

$valore1 addslashes($_POST['valore1']);

// Il valore ora non sarà più semplicemente dell'amico ma: dell\'amico 
Questa è la protezione di base che serve ad evitare sia errori nella query sia le cosiddette SQL Injection.