В PDO данные проверяются и зачастую этого хватает. Но, всё же, идеала не бывает. В некоторых случаях всё равно нужно самому проверять данные.
От XSS - нет, это и не его задача. От SQL-инъекций - если пользовать плейсхолдеры. Для защиты от xss данные, полученные от пользователя, надо выводить через htmlspecialchars
Почитай http://phpfaq.ru/pdo сразу будет понятно или сразу смотри execute для PDO https://secure.php.net/manual/ru/pdostatement.execute.php пример #2
А такой не сломает? А то раньше не занимал о зашите сайта =) В гугл много хлама и не хочет читать! А насчет статейка спс немного узнал! Код (PHP): if (isset($_POST['send'])) { $text = (string)$_POST['text']; try { if(!$text) { throw new \Exception('Сообщение пусто'); } $res = Db::me()->prepare("INSERT INTO chat (user_id, text) VALUES (?, ?)"); $res->execute(Array(Auth::GetUser()->id, $text)); $response->page->message->addSuccess('Сообщение успешно отправлено'); } catch (\Exception $e) { $response->page->message->addError($e->getMessage()); } } А это вывод^ Код (PHP): $q = Db::me()->query("SELECT * FROM chat ORDER BY id DESC LIMIT 10"); if ($arr = $q->fetchAll()) { foreach ($arr AS $message) { $user = new User\Model($message['user_id']); $widget->items[] = $post = Page\Content\Widget\Item::newPost()->SetTitle($user->login); $post->items[] = $html = Page\Content\Item::newHtml(); $html->text = $message['text']; } } else { $widget->items[] = $post = Page\Content\Widget\Item::newPost()->SetTitle('Сообщения отсутствуют'); }