green300, если поле id там целочисленное и автоинкрементное (счётчик или что-то подобное) - то можно перед запихиванием в параметр запроса его обработать, например, привести к (int), тогда даже если что-то не то пользователь скормит, приведётся к нулю. В случае нуля и отрицательных чисел можно тогда и не дёргать базу вообще, т.к. таких id гарантированно не будет.
Правильное условие в WHERE указать? По вашему описанию задачи, как-то так:
$stmt = $pdo->prepare("SELECT * FROM category WHERE `id`=:id");
$stmt->execute(['id'=>$_GET['cat_id']]); // перед этим где-то выше проверить $_GET['cat_id'] на isset, чтоб базу не дёргать, если юзер не передаст в GET-запросе
Как полагаю, текст выводится в браузер? Если так, то нужно указать кодировку через HTTP-заголовок Content-Type, а не надеяться на автодетект со стороны браузера.
В данной ситуации - стечение обстоятельств. Плагины выполняются под теми правами, под которыми на данном сайте работает PHP, если злоумышленник получил к нему доступ и сумел перезаписать .htaccess - точно также он может переписать и любой другой файл, доступный этому пользователю.
Тем не менее, против ботов, которые нацелены на перезапись .htaccess, переход на nginx спасёт, но против живого взломщика или более продвинутых ботов не поможет.
Михаил, много битых секторов, диск менять по гарантии или в мусорку, важные данные как можно быстрее забэкапить, если остались. Новый брать от другого производителя, ADATA редкостные бракоделы.
felix selivan, может быть и с другой стороны: блокирует почтовый провайдер подключения с хостинга, если на хостинге много спамеров. Проверьте также нахождение IP-адреса сервера в чёрных списках
c86ce8, какие-то дристаки писали эту документацию, не удивительно, что они допустили в примере кода ошибки. Посмотрите пример и напишите примерно то же самое по смыслу, но нормально.