Функция Drupal db_query () хранит значение переполнения для INT, которые не слишком велики - PullRequest
1 голос
/ 17 октября 2010

У меня есть этот код внутри обработчика выхода в пользовательском модуле:

$diff = round(((microtime(true)-$script_start_time)*1000));
watchdog('thaty', $diff);
    if(variable_get('thingy', 0) == 1) {
        $data = array(
           'q'=>$_GET['q'],
           'memory'=>memory_get_peak_usage(),
           'execution_time'=>$diff
        );
        db_query('INSERT INTO {blah} (q,memory,dt,execution_time) VALUES (\'%s\',%b,UNIX_TIMESTAMP(),%b)',$data);
    }

Значение $ diff иногда постоянно сохраняется в базе данных как 2147483647, что является значением переполнения для INT, я полагаю, в PHP. Когда я регистрирую значение через сторожевой таймер, я могу подтвердить, что оно не установлено на 2147483647, а на реальное значение, которое представляет собой целое число из трех цифр.

Типичные значения (подтвержденные при регистрации):

  • 708
  • 408
  • 413

Столбец execute_time имеет тип int (11).

Я не могу найти источник этой проблемы. Вещи, которые я пробовал:

1 Ответ

3 голосов
/ 17 октября 2010

Кажется, db_query ("INSERT ....") устарела в пользу drupal_write_record () .

Попробуйте drupal_write_record () .

Видя, что это, безусловно, проблема маскировки при построении запроса (а не проблема с базой данных), может быть, это делает это лучше.

...