Все значения, возвращаемые при выборке из MySQL PDO, являются строками, потому что PDO возвращает значения из базы данных в виде строки, независимо от их исходного типа данных в базе данных. Однако PDO предоставляет возможность явного преобразования этих значений в нужные типы данных посредством вызова соответствующих методов, таких как `PDOStatement::fetchColumn()` или `PDOStatement::fetchAll()`.
Что касается ошибки с количеством параметров в запросе `INSERT INTO`, которая может возникнуть при использовании `PDO::exec`, если режим эмуляции подготовленных запросов включен или отключен, то это связано с особенностями работы с PDO::exec.
При включенном режиме эмуляции подготовленных запросов, PDO::exec ожидает, что строка SQL-запроса будет соответствовать синтаксису MySQL, и не поддерживает использование параметров и подстановки значений через плейсхолдеры (например, `:param` или `?`). В этом случае, передавайте значения напрямую в строку запроса.
При отключенном режиме эмуляции подготовленных запросов, PDO::exec поддерживает параметры и плейсхолдеры, но она не возвращает результат выполнения запроса, а только количество затронутых строк.
Рекомендуется использовать подготовленные запросы с использованием метода `PDO::prepare()` и методов `bindValue()` или `bindParam()` для передачи параметров в запрос. Это более безопасно и эффективно, и предотвращает проблемы с количеством параметров в запросе.