PDO :: exec () следует использовать для запросов, которые не возвращают набор результатов, таких как оператор удаления или «набор».PDO :: query () следует использовать, когда вы ожидаете, что будет возвращен набор результатов.Он возвращает вам объект PDOStatement, который вы можете перебрать, чтобы получить отдельные строки.Обратите внимание, что если вы используете данные из ненадежного источника в своих запросах, подготовленные операторы будут лучшим способом для любого типа запроса (но вы, вероятно, знали это).
Итак, в вашем случае PDO:: exec () будет прав.Вы уверены, что передача команды set names в PDO :: __ construct () в качестве последнего значения не работает?Это работает для меня, и у меня есть PHP 5.3 на Windows.Не могли бы вы опубликовать еще пример кода того, что вы делаете?