Puede utilizar la variable opcional 'sesión' cuando se ajusta el sql_mode en tiempo de ejecución. De esa forma no afectará a otros clientes. Puede establecer SESIÓN sql_mode y luego establecerlo de nuevo al valor anterior después de que su consulta se haya completado. De esta manera, puede establecer el sql_mode para una operación específica.
Desde el manual de MySQL:
"Se puede cambiar el modo SQL en tiempo de ejecución mediante el uso de un conjunto [SESSION | GLOBAL] Declaración sql_mode = 'modos' para establecer el sistema de sql_mode valor. Establecer la variable GLOBAL requiere el privilegio SUPER y afecta la operación de todos los clientes que se conectan desde ese momento. Establecer la variable SESIÓN afecta solo al cliente actual. Cualquier cliente puede cambiar su propio valor sql_mode de sesión en cualquier momento. "
Personalmente agregué algunos métodos a mi clase de base de datos para manejar esto. initSqlMode() ejecutará la consulta 'SELECT SESSION.sql_mode' y almacenará el valor predeterminado como una variable de clase. setSqlMode() le permitirá configurar SESSION sql_mode a un valor personalizado (VALIDADO). resetSqlMode() restablece SESSION sql_mode al valor predeterminado. Utilizo la variable SESSION cuando manipulo el sql_mode en todo momento.
Luego puede hacer algo como lo siguiente. Tenga en cuenta que esto es solo psuedocode; no hay nada en mi ejemplo para evitar la inyección de SQL o parametrizar la consulta 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;
}
}
La respuesta aceptada no es correcta, ¿puedes cambiar la marca? –