INSERT INTO entity_rights_links
SET entity_type=:entity_type, id_entity=:id_entity, id_option=:id_option
ON DUPLICATE KEY UPDATE entity_type=:entity_type
// в данном запросе 4 маски, но только 3 уникальные!
$sql = 'INSERT INTO entity_rights_links
SET entity_type=:entity_type, id_entity=:id_entity, id_option=:id_option
ON DUPLICATE KEY UPDATE entity_type=:entity_type';
PDO::exec($sql, [
'entity_type' => 1, // под капотом bindParam
'id_entity' => 5, // под капотом bindParam
'id_option' => 20000, // под капотом bindParam
]);
// ЕСЛИ PDO::ATTR_EMULATE_PREPARES => false
// выдаст ошибку, так как в запросе 4 дырки а на вход было 3, выдаст ошибку "HY093"
// НО! При выборке выдает правильные типы данных!
// ЕСЛИ PDO::ATTR_EMULATE_PREPARES => true
// ошибок не будет, и запрос выполниться как задумывалось.
// НО! При выборке все значения всегда типа string.
И как быть?
PHP 7.4.3
MySQL 8