Практически любой сторонней утилитой для работы с разделами можно конвертнуть из MBR в GPT без потерь данных. А если данных важных на диске нет - то удалить с диска все разделы и ставить в неразмеченное пространство, тогда установщик сам создаст новую пустую таблицу разделов в нужном стиле.
А кодировки везде правильные? Если при подключении клиент сообщает, что у него одна кодировка, а по факту данные передаёт при этом в другой, то подобная путаница тоже может происходить.
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-запросе