C exec по простому не получится, поскольку exec вызывает mysql_affected_rows() раньше, чем mysql_store_result() (см
github.com/php/php-src/blob/master/ext/pdo_mysql/mysql_driver.c#L256), в то время как документация к libmysql говорит, что в случае, если предыдущий запрос был селектом и mysql_store_result() еще не была вызвана, результатом всегда будет -1 (признак ошибки). Таким образом со стороны сервера остается невычитанный резалтсет (что не дает работать последующим запросам), а mysql_handle_doer() выходит, не доходя до mysql_store_result().
Единственный очевидный способ — пересоздать соединение: $db = null; $db = new PDO(...), поскольку PDO не предоставляет метод disconnect()