Hola katyla:
El SQL injection es cuando, por ejemplo, escribes en un campo de texto en un formulario código SQL de modo que se altera la sencentcia SQL original.
Si tu SQL en tu código es la siguiente 'SELECT nick FROM users WHERE nick=\''.$_POST['user'].'\'' y yo en el campo de texto escribo(comillas incluido): ' OR ''='
La sentencia que al final se ejecutará en el servidor de la BD será:
SELECT nick FROM users WHERE nick='' OR ''=''
la cual siempre es dará resultados. Esto tb se puede hacer con sentencias INSERT o DELETE y con todas las sentencias que tomen directamente datos pasados por el usuario.
Para asegurarse contra el SQL injection tienes que asegurar que el texto que se introduce no tiene ningún caracter que pueda alterar la sentencia.
El método más común (y creo q el menos acertado), es aplicar la funcion mysql_real_escape_string que inserta barras de escape '\' antes de cualquier caracter susceptible de alterar la sentencia SQL. Si lo haces en una sentencia INSERT cuando recuperas estos datos debes aplicarles la funcion stripslashes para quitar las barras.
La otra opcion es manejar los datos binariamente:
'SELECT nick FROM users WHERE nick=UNHEX('.bin2hex($_POST['user']).')');
Para recuperar los datos de una inserción hecha binariamente no es necesario aplicarle ninguna función.
Un saludo
http://krowork.blogspot.com