Вы можете использовать необязательную переменную 'SESSION' при установке sql_mode во время выполнения.Таким образом, это не повлияет на других клиентов.Вы можете установить SESSION sql_mode и затем вернуть его к предыдущему значению после завершения запроса.Таким образом, вы можете установить sql_mode для конкретной операции.
Из руководства MySql:
"Режим SQL можно изменить во время выполнения с помощьюс помощью инструкции SET [GLOBAL | SESSION] sql_mode = 'mode' для установки системного значения sql_mode. Установка переменной GLOBAL требует привилегии SUPER и влияет на работу всех клиентов, которые подключаются с этого времени. Установка переменной SESSION влияет только натекущий клиент. Любой клиент может изменить свое собственное значение sql_mode сеанса в любое время. "
Я лично добавил несколько методов в свой класс базы данных, чтобы справиться с этим.initSqlMode () выполнит запрос SELECT SESSION.sql_mode и сохранит значение по умолчанию в качестве переменной класса.setSqlMode () позволит вам установить SESSION sql_mode в (VALIDATED) пользовательское значение.resetSqlMode () устанавливает для SESSION sql_mode значение по умолчанию.Я использую переменную SESSION, когда постоянно манипулирую sql_mode.
Тогда вы можете сделать что-то вроде следующего.Обратите внимание, что это только psuedocode;в моем примере нет ничего, чтобы предотвратить внедрение SQL или параметризацию запроса SQL.
$db = new database();
$badqueryresult = $db->executeStrict('BAD SQL QUERY');
Class database {
...
function executeStrict($query){
$this->initSqlMode();
$this->setSqlMode('STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION');
$result = $this->Execute($query);
$this->resetSqlMode();
return $result;
}
}