Drupal函数db_query()存储不太大的INT的溢出值

时间:2010-10-17 12:58:50

标签: php drupal drupal-6

我在自定义模块的退出挂钩中有这个代码:

$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的溢出值。当我通过看门狗记录值时,我可以确认它没有设置为2147483647,而是实际值,这是一个三位数的整数。

典型值(通过记录确认):

  • 708
  • 408
  • 413

execution_time列是int(11)。

我似乎找不到这个问题的根源。我尝试过的事情:

1 个答案:

答案 0 :(得分:3)

似乎不推荐使用db_query(“INSERT ....”)而使用​​drupal_write_record()

尝试drupal_write_record()

在构建查询(而不是数据库问题)时,这肯定是一个掩盖问题,也许这样做会更好。