4Biz, например, самая большая дыра - работа с БД MySQL Нелогично, например, вытаскивать данные с помощью функции mysql_fetch_array(), если можно использовать mysql_fetch_assoc(). И это не нюансы. Это элементарщина. А уж о функциях printf() и mysql_real_escape_string() для защиты от SQL инъекций Евгений наверно до сих пор не слышал. А зря... И это не сложные материи. Это то, что нужно знать с самого начала обучения.
Нелогично и дырки - это все таки разные вещи. mysql_fetch_array() все го лишь вернет массив в два раза больше размером, однако современные сервера этого даже не заметят. C таким же успехом я могу сказать что и функцию mysql_fetch_assoc использовать нелогично, когда в PHP5 есть PDO. mysql_real_escape_string() на данный момент практически бесполезна, т.к. почти на всех серверах включено автоматическое экранирование, и использование в лоб mysql_real_escape_string приведет в итоге к расплодившимя "\\\\'". Инъекции как правило получаются совсем от другого, например когда численные значения подставляют в запрос, не проверив их:
DELETE FROM some_table WHERE id = $some_var
Тут mysql_real_esacpe() не поможет, так же как и print_f, потому что кавычки надо жестко прописывать вокруг $some_var, либо так же жестко приводить к типу int.