Jump to content
php.lv forumi

INET_ATON iemauc 2147483647


niko

Recommended Posts

Respektīvi, ir nosacīta apmeklētāju skaitīšanas sistēma - tiek reģistrēts laiks un IP. Ja šie lielumi sakrīt, tad otrreiz ieraksts pievienots netiek. Datuma pievienošana notiek ar NOW() (lauks ir DATE) un Ip tiek pārvērsts ar INET_ATON palīdzību. Ip iegūta ar $_SERVER['REMOTE_ADDR']. Tomēr, visā tajā slēpjas kāds bugs, jo vienā un tajā pašā dienā vairākkārtīgi IP laukā tiek pievienots ieraksts 2147483647. Pats lauks datubāzē ir noformēts kā INT. Būtu interesanti uzzināt kāpēc tā notiek?

Link to comment
Share on other sites

IP citā dienā var atkārtoties.

 

Ak jēl... UNIQUE_KEY {IP,DATE}

 

Starp citu (1), uzliec tipu laukam INT_UNSIGNED (2 lielāks cipars ielīdīs)

Starp citu (2), MYSQL ir tips BIGINT, kurš glabā ciparu kā stringu.. bet perversijām programmā ar tipu konvertāciju

Edited by Delfins
Link to comment
Share on other sites

Vai tik IP nav SIGNED INT lauks? Tādējādi liekot "lielas" IP adreses >=128.0.0.0 tāds integers >=0x80000000 nelien signed tipā, tāpēc MySQL ieliek maksimālo signed intu kāds iespējams - 0x7FFFFFFF = 127.255.255.255 = 2147483647.

Link to comment
Share on other sites

×
×
  • Create New...