mysqli sta per mysql improved e sostanzialmente supporta funzionalità più avanzate rispetto alla classica estensione mysql

la differenza tra la funzione mysql_query e la funzione mysqli_query è quasi inesistente, ma ovviamente non puoi usare la funzione mysql_query se usi mysqli e viceversa non puoi usare mysqli_query se usi mysql_query ... quindi c'è bisogno dell'apposita funzione ... tra l'altro, oltre al mero fattore di incompatibilità della risorsa ritornata dai rispettivi connect ... metti che è presente solo l'estensione mysql o solo la mysqli ... devi usare quelle apposite

l'estensione mysqli ha varie funzionalità aggiuntive, rispetto alla mysql, in primis i (server) prepared statement

personalmente non ne uso, anche se magari benissimo non faccio, però se li vuoi usare ne hai bisogno

qui c'è una comparazione tra mysqli, mysql e pdo_mysql
http://it.php.net/manual/en/mysqlinfo.api.choosing.php

benché vi siano parecchie differenze, in realtà quelle principali sono relativi ai server prepared statements (quelli client sono pressocché inutili, ti possono essere utili se realizzi un sistema che deve supportare più backend dati e tra questi ve ne sono alcuni che non supportano i prepared statements) e al fatto che l'estensione mysql è deprecata da tempo

tutte le altre differenze sono ininfluenti (query multiple in un sol comando possono portare a sql injection [basterebbe fare qualcosa tipo MIO CODICE SQL;-- e via, anche se ovviamente utilizzando nel contempo i prepared statement questo problema si risolve] ... inoltre del codice ben strutturato sfrutta piuttosto l'inserimento multiplo magari giocando con le chiavi e on duplicate key update) o altre non sono importanti (è vero che non posso avviare transazioni tramite le api così come non posso gestire le stored procedures tramite api ... ma posso sempre chiamare la query che faccia l'operazione ed ottengo praticamente lo stesso risultato) ... ovviamente usando mysqli ci sono meno rogne