Как изменить sql_mode во время выполнения

Настройки My MySQL server sql_mode установлены на STRICT. Я хочу изменить его на TRADITIONAL для конкретного приложения, которое я разрабатываю. Однако мне не удалось сделать это на уровне сервера.

Можно ли изменить параметр sql_mode во время выполнения из моих PHP-скриптов?

Ответ 1

Хм это должно работать

// connect to mysql and call the first query
mysql_query("SET SESSION sql_mode = 'TRADITIONAL'");

Ответ 2

РЕШЕНИЕ ДЛЯ WORDPRESS:

Для тех, кто хочет добиться результата в WordPress, мое решение следующее:

Поместите следующую функцию в файл functions.php вашей темы/главной страницы вашего плагина:

function get_zeroed_datetime() {
    $modes = array("SET SESSION sql_mode = 'TRADITIONAL'");
    global $wpdb;
    $wpdb->set_sql_mode($modes);
    return '0000-00-00 00:00:00';
}

При выполнении вставки в БД (например) используйте ее так:

$wpdb->insert('test_table',
            array(
                'verified_on' => get_zeroed_datetime()          
            ),
            array(              
                '%s'
            ));

где 'verified_on' - это имя столбца в формате DATETIME.

ЧТО ДОСТИГНУТ КОД:

Если sql_mode установлен на STRICT на сервере, он не позволит вам вставить обнуленные значения в столбец DATETIME. Приведенный выше код помогает в решении этой проблемы.