Bah la concaténation (dans ton cas), c'est le fait de passer des variables dans une string (chaine de caractères). Maintenant pour la sécurité, la concaténation en elle même n'a aucun rapport. C'est plus comment tu la fais que le fait de le faire (si tu vois ce que je veux dire... par exemple, il est préférable de faire :
$var = "bibi";
...
$rq = "SELECT pass FROM membres WHERE pseudo = '".$var."'";
à ca :
$var = "bibi";
...
$rq = "SELECT pass FROM membres WHERE pseudo = $var";
Pourquoi ? Tout simplement pour prévenir des injection de code (dans ce cas-ci, injections SQL).
Maintenant les arobases, pour faire simple, ca indique à PHP de ne pas afficher une erreur s'il en arrive une.
Exemple :
@echo $var;
Si $var est définie, pas d'erreur. Si elle n'existe pas, normalement tu as le droit à une erreur comme quoi il est pas possible pour PHP d'appeler cette variable. Or l'arobase fait que le script n'affiche pas d'erreur et continu (apres selon ton niveau, tu peux reconfigurer le serveur pour qu'il arrete un script ou non en fonction du niveau des erreurs rencontrées)
Et pourquoi mysql_select_db n'est pas mit dans une variable ? Parce que dans ce cas ci tu n'en as pas besoin. Il doit certainement renvoyer true si tout ce passe bien et false si ca se passe mal. Ca sert à faire des détection d'erreurs. Donc dans ton cas inutil. Et bien sur, tu peux utiliser des fonctions sans les passer dans des variables obligatoirements (comme echo ou print).
Voilà, j'espère que je t'ai éclaircit un peu...
