(Это не ответ на ФП, но что-то, что вас действительно должно волновать, поэтому я думаю, что это стоит написать)
Кажется, в вашем коде огромная SQL-инъекция.
Обычный способ вызова вашей страницы - что-то вроде "xid=5
" в URL, чтобы получить информацию о пользователе # 5.
Теперь предположим, что кто-то дает "xid=5 or 1=1
". Результирующий запрос будет:
SELECT * FROM `utinfo` WHERE `xid` = 5 or 1=1
Условие всегда верно; вы получите информацию о ВСЕХ пользователях в качестве выходных данных при выполнении итерации по набору результатов.
Другая возможность: "xid=5; delete from utinfo;
"; который бы дал этот запрос:
SELECT * FROM `utinfo` WHERE `xid` = 5; delete from utinfo;
Это опустошит ваш стол : - (
Вы всегда должны экранировать / проверять / дезинфицировать / все ваши данные, прежде чем помещать их в SQL-запрос, особенно (но не только), если они получены от пользователя приложения.
Для строк см. Функцию mysql_real_escape_string
.
Для данных, которые могут быть целыми числами, вы можете использовать intval
(в худшем случае, если данные недействительны, вы получите 0, что может не дать результата из БД, но при по крайней мере, не сломаю его ^^)
Другим решением будет использование подготовленных заявлений; но они недоступны с функцией mysql_*
: вам нужно переключиться на
В любом случае, для нового приложения не следует использовать mysql_*
: оно старое и не получает новых функций / улучшений, которые получают mysqli и PDO ...