PHP與MYSQL配合完成IP的訪問

2022-04-22 08:40:04 字數 3855 閱讀 5617

程式設計要在功能實現的基礎上最大限度的優化效能。而資料庫設計是程式設計中不可忽略的重要部分,巧存ip位址可以一定程度提公升效能。

mysql沒有直接提供ip型別字段,但有兩個函式可以把ip與最大長度為10位數字型別互轉,所以使用int型別儲存ip比varchar型別儲存ip位址效能要提公升很多,更節省儲存空間。varchar是可變長型別,需要多餘的乙個位元組長度。另外int型在邏輯運算上要比varchar速度快。

我們轉換下幾個常用的ip位址12

3456

78910

1112

1314

1516

1718

1920

2122

23mysql>selectinet_aton('255.255.255.255');

+------------------------------+

| inet_aton('255.255.255.255') |

+------------------------------+

|                   4294967295 |

+------------------------------+

1 rowinset(0.00 sec)

mysql>selectinet_aton('192.168.1.1');

+--------------------------+

| inet_aton('192.168.1.1') |

+--------------------------+

|               3232235777 |

+--------------------------+

1 rowinset(0.00 sec)

mysql>selectinet_aton('10.10.10.10');

+--------------------------+

| inet_aton('10.10.10.10') |

+--------------------------+

|                168430090 |

+--------------------------+

1 rowinset(0.00 sec)

所以ip的表字段可以設定為int(10)就好,如果ip獲取不到可以直接存0代表獲取不到ip的意思12

3456

78910

1112

1314

1516

1718

1920

2122

2324

2526

2728

2930

31mysql>selectinet_ntoa(4294967295);

+-----------------------+

| inet_ntoa(4294967295) |

+-----------------------+

| 255.255.255.255       |

+-----------------------+

1 rowinset(0.00 sec)

mysql>selectinet_ntoa(3232235777);

+-----------------------+

| inet_ntoa(3232235777) |

+-----------------------+

| 192.168.1.1           |

+-----------------------+

1 rowinset(0.00 sec)

mysql>selectinet_ntoa(168430090);

+----------------------+

| inet_ntoa(168430090) |

+----------------------+

| 10.10.10.10          |

+----------------------+

1 rowinset(0.00 sec)

mysql>selectinet_ntoa(0);

+--------------+

| inet_ntoa(0) |

+--------------+

| 0.0.0.0      |

+--------------+

1 rowinset(0.00 sec)

注意,0轉換為 0.0.0.0

*******************華麗分割***********************

以上為原文內容,實際使用中,換了一台ip位址較大的機器登陸後,發現資料庫中竟存入了乙個負值...

環境php+mysql+32位win7

於是查詢原因...此處省略3000字

結果如下:

解決方案:將mysql儲存ip的字段設定為bigint型別,否則會溢位

儲存ip之前,將ip2long轉換過的值處理為2進製,再處理回10進製,示例:bindec(decbin(ip2long('192.168.1.17')));  //3232235793

至此問題解決,後遺症暫未發現,發現再糾正...

from: 修正:faddei

php與memcached配合使用注意事項

1.memcached啟動的時候,如果指定了ip,則建立鏈結的時候socket會繫結到這個連線上。例如 home admin memcached bin memcached d m 5000 i 192.168.1.1 則socket繫結到了192.168.1.1上去,如果在php中鏈結的時候 通過...

採用php與Mysql資料庫完成使用者註冊登入等操作

採用php與mysql資料庫,完成使用者註冊程式,登錄檔單項可自由指定,盡量包含所有表單型別,註冊成功後在新頁面顯示註冊資訊,註冊中需要上傳的 的操作功能使用自定義函式呼叫,並在註冊成功後顯示 2 採用php與mysql資料庫,完成使用者登入功能。步驟如下 1 資料庫設計 users.sql set...

採用php與Mysql資料庫完成使用者註冊登入等操作

採用php與mysql資料庫,完成使用者註冊程式,登錄檔單項可自由指定,盡量包含所有表單型別,註冊成功後在新頁面顯示註冊資訊,註冊中需要上傳的 的操作功能使用自定義函式呼叫,並在註冊成功後顯示 2 採用php與mysql資料庫,完成使用者登入功能。步驟如下 1 資料庫設計 users.sql set...