Можно ли один раз использовать глобальную переменную?
Странно, в тексте упоминается объект $pdo, а в коде статический вызов, у которого никаких проблем с видимостью в принципе быть не может.
Но есть отвечать буквально, то 
1. Если код процедурный, то global для $pdo или статический вызов через DB:: - это нормально. Если код объектный, то передавать $pdo  как параметр в конструктор, присваивать локальной переменной класса и потом уже использовать только ее.
2. В данную конструкцию никакая инъекция не пролезет
Писать, кстати, можно короче, чтобы не канителиться.$data = array(
  'email' => $_POST['email'],
  'id' => $_POST['id']
);
$res = DB::prepare("UPDATE `users` SET `email` = :email WHERE `id` = :id")->execute($data);
 Глобальными переменными не гнушаются и гранды. Я бы только подумал чтобы вынести все в отдельный файл.А то как же ;-) Кто фильтровать ввод будет?