Ben özel bir modül bir çıkış kanca içinde bu kodu vardır:
$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 değeri bazen sürekli bir INT taşma değeri 2147483647 olarak veritabanına kaydedilir alacak, PHP, inanıyorum. Ben Watchdog yoluyla değerini oturum açtığımda ben 2147483647 ayarlanmış almaz onaylamak, ama üç basamaklı bir tam sayı olduğu, gerçek değeri olabilir.
(Günlük teyit) Tipik değerler:
- 708
- 408
- 413
Execution_time kolon int (11) 'dir.
Ben bu sorunun kaynağını bulmak için görünmüyor olabilir. Ben denedim şeyler:
- Değeri için% d yerine% b kullanarak
- Yeni bir INT değişkene $ diff Atama
- Bu yanlış değerin ön-uç denetleniyor
- $ Diff değerini teyit PHP bir INT için çok büyük değil
- Kullanarak çalıştı% n, re: http://www.lullabot.com/articles/drupocalypse-now-or-dangerous-integer-handling-drupal-write-record