diff --git a/src/aphront/storage/connection/mysql/AphrontMySQLDatabaseConnection.php b/src/aphront/storage/connection/mysql/AphrontMySQLDatabaseConnection.php --- a/src/aphront/storage/connection/mysql/AphrontMySQLDatabaseConnection.php +++ b/src/aphront/storage/connection/mysql/AphrontMySQLDatabaseConnection.php @@ -93,9 +93,39 @@ if (!$ok) { mysql_set_charset('binary', $conn); } + + $this->set_sql_mode(array( + 'STRICT_ALL_TABLES', + 'NO_ZERO_IN_DATE', + 'NO_ZERO_DATE', + 'ERROR_FOR_DIVISION_BY_ZERO', + 'NO_AUTO_CREATE_USER', + 'NO_ENGINE_SUBSTITUTION'), + $conn); return $conn; } + + protected function set_sql_mode($modes = array(), $conn) { + if (empty($modes)) { + $res = mysql_query('SELECT @@SESSION.sql_mode', $conn); + if (empty($res)) { + return; + } + + $modes_str = mysql_result($res, 0); + if (empty($modes_str)) { + return; + } + + $modes = explode(',', $modes_str); + } + + $modes = array_change_key_case($modes, CASE_UPPER); + $modes_str = implode(',', $modes); + + mysql_query("SET SESSION sql_mode='$modes_str'", $conn); + } protected function rawQuery($raw_query) { return @mysql_query($raw_query, $this->requireConnection()); diff --git a/src/aphront/storage/connection/mysql/AphrontMySQLiDatabaseConnection.php b/src/aphront/storage/connection/mysql/AphrontMySQLiDatabaseConnection.php --- a/src/aphront/storage/connection/mysql/AphrontMySQLiDatabaseConnection.php +++ b/src/aphront/storage/connection/mysql/AphrontMySQLiDatabaseConnection.php @@ -80,9 +80,43 @@ if (!$ok) { $ok = $conn->set_charset('binary'); } + + $this->set_sql_mode(array( + 'STRICT_ALL_TABLES', + 'NO_ZERO_IN_DATE', + 'NO_ZERO_DATE', + 'ERROR_FOR_DIVISION_BY_ZERO', + 'NO_AUTO_CREATE_USER', + 'NO_ENGINE_SUBSTITUTION'), + $conn); return $conn; } + + protected function set_sql_mode($modes = array(), $conn) { + if (empty($modes)) { + $res = mysqli_query($conn, 'SELECT @@SESSION.sql_mode'); + if (empty($res)) { + return; + } + + $modes_array = mysqli_fetch_array($res); + if (empty($modes_array)) { + return; + } + $modes_str = $modes_array[0]; + if (empty($modes_str)) { + return; + } + + $modes = explode(',', $modes_str); + } + + $modes = array_change_key_case($modes, CASE_UPPER); + $modes_str = implode(',', $modes); + + mysqli_query($conn, "SET SESSION sql_mode='$modes_str'"); + } protected function rawQuery($raw_query) { $conn = $this->requireConnection();