Changeset 600 for trunk/lib


Ignore:
Timestamp:
Apr 27, 2017 3:29:17 PM (7 years ago)
Author:
anonymous
Message:

Update strToSQLDate() to be mysql-version-aware

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Utilities.inc.php

    r598 r600  
    915915function escapedList($in, $separator="', '")
    916916{
     917    require_once dirname(__FILE__) . '/DB.inc.php';
    917918    $db =& DB::getInstance();
    918919
     
    930931 *
    931932 * @param  array $date     String date to convert.
    932  * @param  array $format   Date format to pass to date().
    933  *                         Default produces MySQL datetime: 0000-00-00 00:00:00.
     933 * @param  array $format   Date format to pass to date(). Default produces MySQL datetime: YYYY-MM-DD hh:mm:ss
    934934 * @return string          SQL-safe date.
    935935 */
    936936function strToSQLDate($date, $format='Y-m-d H:i:s')
    937937{
     938    require_once dirname(__FILE__) . '/DB.inc.php';
     939    $db =& DB::getInstance();
     940
     941    if ($db->isConnected() && version_compare(mysql_get_server_info(), '5.7.4', '>=')) {
     942        // Mysql version >= 5.7.4 stopped allowing a "zero" date of 0000-00-00.
     943        // https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_zero_date
     944        $zero_y = '1000';
     945        $zero_m = '01';
     946        $zero_d = '01';
     947    } else {
     948        $zero_y = '0000';
     949        $zero_m = '00';
     950        $zero_d = '00';
     951    }
    938952    // Translate the human string date into SQL-safe date format.
    939     if (empty($date) || mb_strpos($date, '0000-00-00') !== false || strtotime($date) === -1 || strtotime($date) === false || strtotime($date) === null) {
     953    if (empty($date) || mb_strpos($date, sprintf('%s-%s-%s', $zero_y, $zero_m, $zero_d)) !== false || strtotime($date) === -1 || strtotime($date) === false || strtotime($date) === null) {
    940954        // Return a string of zero time, formatted the same as $format.
    941955        return strtr($format, array(
    942             'Y' => '0000',
    943             'm' => '00',
    944             'd' => '00',
     956            'Y' => $zero_y,
     957            'm' => $zero_m,
     958            'd' => $zero_d,
    945959            'H' => '00',
    946960            'i' => '00',
Note: See TracChangeset for help on using the changeset viewer.