sql >> データベース >  >> RDS >> Mysql

MySQLデータベースに挿入されたIPは毎回変更されます

    コメントと少しの調査を読んだ後、私は答えを見つけました、そしてそれは簡単です。

    32ビットシステムの場合ip2long() 負と正の整数を返しますが、INET_NTOA() 正の整数でのみ機能します。したがって、これを修正するには2つのオプションがあります。

    1. PHPコードを変更します:$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
    2. SQLクエリを変更します:... AND ip = " . ip2long($_SERVER['REMOTE_ADDR']) . " ...

    この事実は次の方法で確認できます:

    $ip  = $_SERVER['REMOTE_ADDR'];
    $int = ip2long($ip);    
    var_dump($ip, $int, sprintf('%u', $int));
    

    これにより、次の出力が生成されます。

    string '192.168.1.120' (length=13)
    int -1062731400
    string '3232235896' (length=10)
    

    次に、MySQLに移動します:

    mysql> SELECT '192.168.1.120', INET_NTOA(-1062731400), INET_NTOA(3232235896)
    +---------------+------------------------+-----------------------+
    | 192.168.1.120 | INET_NTOA(-1062731400) | INET_NTOA(3232235896) |
    +---------------+------------------------+-----------------------+
    | 192.168.1.120 | NULL                   | 192.168.1.120         |
    +---------------+------------------------+-----------------------+
    1 row in set (0.00 sec)
    



    1. 列挙された列を使用したデータベース設計の代替手段であり、パフォーマンスが低下します

    2. ここでOracle分析関数を使用できますか?

    3. サーバーで内部エラーまたは構成ミスが発生し、リクエストを完了できませんでした

    4. カジノでの24時間年中無休のスタッフ名簿のデータベースモデル